Simple graph storage designed for universal interoperability
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples use metamaps production site for example Dec 30, 2016
src Bugfix: Stop using edge start->end as edge ID Jan 7, 2017
test Bugfix: Stop using edge start->end as edge ID Jan 7, 2017
.npmignore tweak ignore files Sep 27, 2016
.travis.yml minor CI tweaks Sep 23, 2016 infrastructure Aug 24, 2015 verbiage Sep 23, 2016
circle.yml minor CI tweaks Sep 23, 2016
package.json 0.6.0 Jan 7, 2017
webpack.config.js remove babel, seems to not be needed Apr 28, 2016
yarn.lock update ipfs-api Jan 1, 2017



Nodesphere is an interchange format for node networks. It has three primary objectives:

  1. Create interoperability among graph visualization interfaces
  2. Provide adaptors to connect these interfaces to personal data ecosystems, including social network data, online drives, and ultimately, any public or private data
  3. Abstract data storage and retrieval, allowing transitions from traditional server & database systems toward secure, distributed public and private storage, as these systems become practical and performant


Everything we want to share is a graph, which can be seen as a group of knowledge nodes. We think of this as a "sphere" of nodes; thus nodesphere. Nodesphere is designed to help enable the curation, sharing, visualization, and navigation of all your graph data.


const nodesphere = require('nodesphere')

IPFS (InterPlanetary File System)

nodesphere.adaptor.Ipfs.create({protocol: 'http', host: '', port: 80})
.then((ipfs) => {
  return ipfs.fetch({rootNodeId: 'QmavE42xtK1VovJFVTVkCR5Jdf761QWtxmvak9Zx718TVr'})
}).then((sphere) => {

// prints something like:
// {
//   nodes: {
//     QmavE42xtK1VovJFVTVkCR5Jdf761QWtxmvak9Zx718TVr: {},
//     QmeJTXoV3NeYjScPNAbzk81z9qa7kgb91AnxTgQicpGQXs: { name: '2010', size: 46656, ipfsType: 1 },
//     QmYg9SGT2qBu8BL7NbbT3Wzh1CXyJVGSMFuRLPcLquRhmX: { name: 'index.html', size: 134539, ipfsType: 2 },
//     ...
//   },
//   edges: {
//     'QmavE42xtK1VovJFVTVkCR5Jdf761QWtxmvak9Zx718TVr -> QmeJTXoV3NeYjScPNAbzk81z9qa7kgb91AnxTgQicpGQXs': { start: [Object], end: [Object] },
//     'QmavE42xtK1VovJFVTVkCR5Jdf761QWtxmvak9Zx718TVr -> QmYg9SGT2qBu8BL7NbbT3Wzh1CXyJVGSMFuRLPcLquRhmX': { start: [Object], end: [Object] },
//     ...
//   }
// }

Other Examples

For examples of usage in both Node.js and browser, see:

You can also see examples running live in the browser:

These are intentionally written in simple JS directly in the page source.

Project Genesis

Nodesphere comes from Enlightened Structure and Superluminal ⨕ Systems.

Nodesphere is being developed primarily in the context of the Core Network project.


Build Status

Nodesphere is currently pre-alpha, and things are likely to change. We don't recommend you use it in production yet.

Nodesphere had a complete rewrite on a fresh branch with a new history as of v0.4.0. The older version can be found on the 0.3.x tree.

In the browser

If you are creating a client side application using Nodesphere, consider using polyfills to ensure maximum browser compatibility. For example, include this line before all other javascript tags:

<script src="//"></script>

We build with Webpack. Browserify or similar should work fine too.