Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

115 lines (88 sloc) 3.584 kb

GraphJS logo

GraphJS is a framework for representing mathematical graphs in JavaScript. It is more or less a direct port of the popular NetworkX Python library. Such JavaScript, very math, etc. etc.

Features

  • Nodes can represent anything (e.g. text, atoms, people)
  • Edges can hold arbitrary data (e.g. weights, distances)
  • Standard graph algorithms included
  • API is similar to NetworkX, with support for core classes and algorithms.
  • Works in Node.JS and Browser
  • Open-source BSD License
  • Synchronous/Asynchronous APIs

Installation

The entire library ships in a single file. You can include this directly in Node.JS or within the Browser.

node.js:

npm install GraphJS
GraphJS = require('GraphJS'); // or require('./graph.min.js')

browser:

<script src='graph.min.js'></script>
<script>
    var g = GraphJS.Graph();
</script>

No external dependencies are required.

Building GraphJS from Source

Note: this feature is not quite ready yet.

The source is written in CoffeeScript. If you only need a few classes/algorithms from GraphJS, you can build GraphJS to only include the features you want.

To compile for the browser, install browserify and coffeeify and build using the following:

$ browserify -t coffeeify --extension=".coffee" index.coffee > graph.min.js

GraphJS.structures

Choose which type of graph is best suited for your application:

  • Graph: undirected graph with self-loops (basic)
  • DiGraph: directed graph with self-loops
  • MultiGraph: undirected graphs with self loops and parallel edges
  • MultiDiGraph: directed graph with self loops and parallel edges

This is a graph

This is a Multigraph

Inheriting Graphs

Modeling a social network is easy:

var SocialNetworkClass = function() {
    // redefining nodes as people and edges as relationships
    this.people = this.node;
    this.relationships = this.adj;  
}
SocialNetwork.prototype = new GraphJS.classes.Graph();
SocialNetwork.prototype.constructor = SocialNetwork;
var exampleNetwork = new SocialNetwork();

GraphJS-NetworkX Compatibility Notes

TODO

How You Can Help

GraphJS is developed in my spare time, and usually out of necessity for a graph algorithm or two in some other project of mine. You can support this project in several ways:

  1. File issues, bug reports, feature requests.
  2. Contribute Code!
    • Source code is written in CoffeeScript, which is syntactically similar to Python.
    • Read NetworkX documentation to understand GraphJS's desired architecture.
    • Implement a feature or two and submit a pull request.
  3. You can buy me a donut! Here is a bitcoin donation link:
Jump to Line
Something went wrong with that request. Please try again.