A review of GoJS from someone who has actually used it

I love graphs, charts and visualizations. I find that telling a story through data is a great way to express ideas. These types of visualizations are especially great for translating analytic data into easy to understand information.

The modern Internet has a ton of different ways for web developers to express data visualizations and build graphs. Static images, SVG images, HTML5 Canvas are all great ways to build graphs and web visualizations. For each of these mediums there is a ton of different libraries. This includes numerous JavaScript libraries such as GoJS, D3.js and Chart.js. Each of these libraries excels at certain things.

This post is about GoJS and what it excels at, but also where it falls short compared to other JavaScript graphing libraries.

I have personally used a lot of different JavaScript visualization libraries, including D3, Chart.js, Highcharts, GoJS, Leaflet, Chartist.js, and plain old HTML5 Canvas. My main experience with GoJS is building enterprise level web applications. For personal projects I use other libraries. I will explain why this is the case as I tell you more about GoJS.

Great Things About GoJS

The first thing to understand about GoJS is that it is a juggernaut of a library. What I mean is that it is super powerful and able to do a ton of stuff. It is more powerful, out of the box, than most other JavaScript graphing libraries. To do what GoJS does is other libraries would take a lot of work.

This is the main reason that I have used GoJS for enterprise level apps. My development team would end up spending a ton of time (and money) recreating all the features that GoJS provides. The amount of features built in to GoJS allows us to create an exceptional graphing tool in less time.

If you have not done so, take a look at the examples on the GoJS website. They give you a good idea of all the features and customizations that GoJS comes with.

I don't want to mislead anyone and make them think that GoJS requires no work. This is a JavaScript library that still needs to be implemented by JavaScript developers. You will still need to write the code to make GoJS do what you want it to do.

The amount of code that I have had to write to get GoJS to do what I want it to do is far less than I would have had to write for a tool such as D3.js. I am certain I can do the same things that I do in GoJS using D3, but it would take a lot more time and effort to do so in D3.

GoJS is professionally developed. This means that it has a dedicated team working on the product and working on fixing any bugs that might arise. It also means that the documentation for the library is extensive and well written. Unlike free, open source projects, GoJS has a paid team that is there to ensure that the library is easy to use and understand. They spend part of their days working on documentation. This also means that if you ask a question on the GoJS website forum, the reply you get will likely be from someone who has deep knowledge of the library.

GoJS is especially great at graphs that have nodes and links. In fact, this is its specialty. If you need bar charts or pie charts, go with another library. If you want nodes and links that look good and are highly interactive, GoJS is a very powerful tool.

GoJS The Bad Parts

GoJS does have some drawbacks, and these are the reason I have never used GoJS on a personal projects.

One is that it costs money. You can contact their sales department for actual pricing, but the library is more money that I would be willing to spend on a side project. The money is well worth it for companies which are selling enterprise products, but probably not worth it for individuals working on smaller projects. You can try out GoJS for free for an unlimited period of time, so feel free to experiment and build something with the library, but you will need to buy a license if you plan on using GoJS for a commercial venture.

Another drawback of GoJS is that it is not open source. While the library does have great, professionally written documentation and arguably an even more informative forum, you cannot actually see the underlying GoJS code. This can be frustrating if you are trying to do something that is not built in to the library. There have been times where I was trying to implement a design concept into the library that was not built in to the library. It would have been a lot easier to implement these concepts if I had known exactly what GoJS is doing under the hood.

That being said, I was always able to figure out a way to do what I wanted, and the GoJS team was always helpful if I posted a question or asked for assistance on their forums.

Finally, because GoJS is so powerful, there is a lot to learn when first using the library. Though the documentation is great, it is still very confusing understanding all the different parts of the GoJS library (graphObjects, parts, panels, nodes, links, adornments, layers, etc.) That's a problem you will run into when using any library as powerful as GoJS. There's a steep learning curve and if you need to get a project done by next week, GoJS might be too complex for your needs.

On that note, this is not necessarily a negative or a positive but I did notice that GoJS has a lot of documentation explaining things. This is very different from D3, which tends to has a lot of examples but less documentation. GoJS documentation tells you how things work; D3 documentation shows you how to do something. I don't know which of these approaches I like more. I feel like D3's example based documentation will get you up and running faster, while GoJS's explanation based documentation will give you a more in-depth understanding of what is going on. I guess it all depends on what type of learner you are.

Should You Use GoJS?

If you need a high powered graphing library that allows you to do a ton of things with nodes and links, and you are willing to spend a bit of money? Then yes. If you don't need a ton of powerful features then you can probably find a free library that is more simple to learn. It all depends on the type of project you are working on.

Personally I have been very happy with GoJS in building a very powerful and highly customized enterprise level application.