It’s been a long time coming but its finally here! We have just released the newest version of vis.js:
                v4! This is a breaking release (hence the version number change). This means the options and the API
                have been changed in such a way that it is no longer backwards compatible.
            
            
                We know it is annoying to go back to your code and making the required changes, but I guarantee that it
                is for the best. To help with this migration, we have included an option validator to our new release.
                This validator is currently applied on the network, timeline and graph2d. It checks if the options you
                supply are of the right type. If your options do not exist or if the type is wrong, it will give
                you an understandable message with suggestions of options you may have meant. We think this will make
                developing for vis a lot easier, as well as the migration from v3 to v4.
            
            
                The biggest change in this release is in the network module. We have rewritten the network module in
                full and the results are cleanly separated ES6 modules. The option structure has been changed to suit
                this structure. The options have also been grouped, making it easier to document and understand. For example,
                lets look at the options for fonts. It used to be fontColor, fontFace fontSize, which is now
                grouped in a font object with {color:’’,face:’’,size:’’}. Also completely new is the clustering
                mechanism. It used to be mostly automatic and twitchy but this new version gives all the control to the
                user. This should make the clustering very useful and I’ll be happy to hear of missing features for
                this!
            
            
                We have moved to hammer.js 2 for all of our touch and click events, and a lot of work has gone into
                updating all the css elements (especially for timeline) to eliminate conflicts with large frameworks
                that overload everything.
            
            
                Over the last year, we have received a lot of issues on our Github page for which we are very thankful.
                Whether it is a bug report, question or feature request, we handle all of them as quickly as we can, and
                with these big new rewrites it gives us a new perspective on what is important. We hope the validator
                will prevent a lot of issues. The new examples have also been designed to more clearly show simple
                options. We plan to provide links to JSBin for all options, but this is a lot of work (for which we
                wouldn’t mind some help ;) ).
            
            
                So what’s next? Well the next module that really needs a good overhaul is the graph2d. This module is
                used by us internally quite a lot, and we need to improve the architecture and make it easy to extend it
                with new graph types.
            
            
                We want to unify the code between the timeline and the graph2d even more. The ideal result would be
                using a graph2d as a group in the timeline, or use the timeline items in a graph2d without nasty hacks.
                The graph2d should get numeric x axis (so not necessarily only time), logarithmic axis and hopefully the
                architecture will be flexible enough to allow the x and y axis to be interchanged. The API across the
                modules will also be further unified, and I think we’ve made a great start with v4!
            
            
                From all the modules currently in vis, the graph3d is the oldest and currently the one suffering a lack
                of attention. If you are an excited user of the graph3d module and want to contribute, we’re open for
                additions to the vis.js team! The graph3d is feature complete but a webgl implementation could be a
                great improvement.
            
            
                I cannot give a timeframe for the things I have discussed here, and we’re always open for ideas and
                contributions. If you feel like you want to contribute, let us know :).
            
            Changelog:
            General
            
                - Changed the build scripts to include a transpilation of ES6 to ES5
                    (using http://babel.org), so we can use ES6 features in the vis.js
                    code.
                    When creating a custom bundle using browserify, one now needs to add a
                    transform step using babelify, this is described in README.md.
Timeline
            
                - Integrated an option configurator and validator.
- Implemented option multiselect, which is false by default.
- Added method setData({groups: groups, items: items}).
- Fixed range items not being displayed smaller than 10 pixels (twice the
                    padding). In order to have overflowing text, one should now apply css style
                    .vis.timeline .item.range { overflow: visible; }instead of.vis.timeline .item.range .content { overflow: visible; }.
                    See example 18_range_overflow.html.
- Fixed invalid css names for time axis grid, renamed hours class names from
                    4-8htoh4-h8.
- Deprecated option showCustomTime. Use methodaddCustomTime()instead.
- Deprecated event finishedRedrawas it's redundant.
- Renamed option animatetoanimation, and changed it to be either a boolean
                    or an object{duration: number, easingFunction: string}.
- Fixed #831: items losing selection when their type changed.
Graph2d
            
                - New option structure.
- Cleaned up docs.
- Fixed #628: stacking order.
- Fixed #624: sorting order.
- Fixed #616: stacking with negative bars.
- Fixed #728: alignment issues.
- Fixed #716: Height of graph 2pxtoo large when configuring a fixed height.
Network
            The network has been completely rewritten. The new modular setup using ES6 classes makes
                it future proof for maintainability, extendability and clarity. A summary of new features:
            
                - New examples, categorized by topic.
- New docs.
- New option structure, adhering to the modular setup on the backend.
- New events for user interaction.
- New render events for drawing custom elements on the canvas.
- New physics events for making a loading bar during stabilization.
- A lot of new methods that make extending easier.
- Manipulation system now works without the UI neccesarily.
- Nodes and edges can cast shadows.
- Configurator system to dynamically change almost all options.
- Validator has been created for the network's options, warning you about typo's and suggesting
                    alternatives.
                
- Diamond shape for nodes.
- Unified the label code so edges and nodes have the same label settings.
- InheritColors for edges can be set to both, making a gradient fade between two node colors.
- Redesigned the clustering system giving full control over it.
- Random seed can be saved so the network will be the same every time you start it.
- New physics solver based on ForceAtlas2 as implemented in gephi.]
- New avoidOverlap option for physics.
- Many, many bugfixes.
DataSet
            
                - Dropped support for Google visualization DataTable.
- Dropped support for appending data returned by DataSet.get()to an existing
                    Array or DataTable.