Download

Request a trial (Required to Download)

To use KeyLines in your project, download it and install it as a local package.

Get started with our tutorials for JavaScript, Angular, React, Vue, Webpack and Rollup.

Before you upgrade, read our Upgrading documentation and check if any breaking changes or deprecations will affect your code.

Can't upgrade right now? You can find older versions of KeyLines here.

8.6 Release Notes 16 September 2025

ENHANCEMENTSDEMO CHANGESBUG FIXES

Overlap improvements for charts with large labels

A screenshot from Insurance Fraud Analysis demo with nodes indicating insurance claims, witnesses, involved parties and damages

Our organic and lens layouts (and the lens arrangement for combos) are now even better at reducing node label overlaps and creating a more readable chart.

When the tightness option is set to values between 1 and 5, nodes with large labels are spread out more accurately to create fewer label overlaps without obstructions to the view.

Explore the improved behaviour in our Insurance Fraud Analysis demo.

Bug Fixes

  • Circle node and glyph borders are always exported correctly into SVG and PDF.
  • Updating properties of a created link in the drag-end event handler now works as expected.

8.5 Release Notes 14 August 2025

NEW FEATURESDEMO CHANGESBUG FIXES

Font icons ready in 1,2,3

Image of rectangular nodes with font icons
Image of circle nodes with font icons
Image of rectangular nodes with font icons

Custom fonts and font icons are an effective way to improve both usability and aesthetics of your charts and bring their design closer to the rest of your application.

In this release, we've made icon font libraries even easier to integrate. As a result, you can now enter the font icon name directly in the t option on the fi property.

For font families relying on classes such as the popular Font Awesome, the string is treated as a class and rendered with the correct font weight settings. For font familes that don't rely on classes, such as Material Icons, the string is used as a ligature string to look up the correct icon.

For an even better developer experience with fonts and font icons, we are now also using and recommending the document.fonts property from the CSS Font Loading API as a more modern approach to font loading. We've implemented it in our demos as well as in our default Playground.

To learn more, head over to our updated Fonts and Font Icons documentation with brand new step-by-step tutorials.

Deprecations

We've added some legacy APIs to our list of deprecations:

  • We've deprecated the KeyLines.getfontIcon() API as it's no longer needed. Set the font icons directly in the t option on the fi property.

8.4 Release Notes 30 June 2025

NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

Take control over glyph border styling

Impact analysis demo screenshot

Glyphs are incredibly versatile - you can use them as alerts, counters, short texts, decorations or even as interactive buttons. To make glyphs easier to use and integrate into your charts, we've introduced a more intuitive and customisable border styling API.

The new border object features a colour property to set a border colour as previously available, but it also has a brand new border width to customize the border width.

Explore the new API in the updated Node Styles and Style Links demos. We've also redesigned our Impact Analysis demo with an enhanced alert system with interactive annotation glyphs.

Enhancements

  • We've improved the performance of large charts with annotations. These improvements are especially notable for charts where annotations are linked to many subjects, and for annotated charts containing many nodes with text labels.

Deprecations

We've added some legacy APIs to our list of deprecations:

  • We've deprecated the b option for glyphs. Use the new border API instead.

Bug Fixes

  • Width of annotation labels is now calculated correctly.
  • Halos and donuts are now always exported correctly to SVG and PDF.
  • Dashed borders on circle nodes are now always drawn correctly in WebGL.
  • Updating images in open combo labels no longer causes unnecessary flickering.
  • Dragging an annotation returns the correct annotation id in the pointer-move event.

8.3.2 Patch Notes18 June 2025

  • Rectangular items with rounded corners no longer show artefacts in WebGL in some browsers.

8.3.1 Patch Notes27 May 2025

  • Fixed an issue where some pixels near a node label edge were incorrectly excluded from the interaction area.

8.3 Release Notes 30 April 2025

NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

Elevate your designs with link label styling

We've introduced a number of new link label styling options to help you create richer and more cohesive chart designs.

The new border property lets you specify a border around your link labels and customise it with colour, width and even border radius. We've also added a new padding property that controls the amount of padding within your labels and make them stand out within your designs.

To quickly and easily differentiate selected links in the chart, use the new link label styling properties on the selectedLink API.

Explore our updated demos to learn more about the new link labels:

Enhancements

  • Thanks to improved anti-aliasing for rectangular labels, sloping rectangular labels are now drawn with smoother edges.
  • The organic layout is now even more efficient when adding and expanding items into large charts, resulting in less unnecessary movement and better performance.
  • Our Figma Design Kit is now in General Availability and you can download the latest version here.
  • The new changeEventThrottling time bar option lets you control the interval between individual change events.

Bug Fixes

  • Labels with minHeight set to 'stretch' are drawn correctly on auto-sized nodes and annotations.
  • Annotation containers around subjects nested in combos are now animated correctly during combo animations.

8.2.1 Patch Notes17 March 2025

  • We recently launched the Cambridge Intelligence Figma Design Kit, which helps accelerate the design and build of your graph and timeline visualisations. It is now available to download here.

8.2 Release Notes 12 February 2025

ENHANCEMENTSDEMO CHANGESBUG FIXES

Enhancements

  • We've refreshed our Advanced Node Styles demo with new node designs and our latest features to give you even more inspiration for node styling.
  • Our angled links now support flow animation.
  • Our aggregate links are more performant in some situations including aggregating links between and within combos, foregrounding and backgrounding aggregate links.
  • The most popular tutorials from our Using KeyLines with... suite feature new npm, yarn and pnpm tabs which show the right steps for your selected package manager.
  • A new section in the Obfuscation Requirements documentation clarifies your obligations with regards to any applicable Open Source Software (OSS) licenses.

Bug Fixes

  • Link ends now correctly avoid node labels with rounded corners.
  • Calling chart.load() in map mode now behaves as expected.
  • Links between combos are now always aggregated when animate is set to false.
  • Glyphs on nodes with certain node IDs are now always positioned correctly on the node.
  • Node and link labels with a specified labelOffset are now always exported as expected.
  • We've fixed an issue where KeyLines.webGlSupport() failed to detect an unsupported graphics backend.
  • Using chart.setProperties() in the handler of a drag-over event in WebGL now always applies the changes when the event is fired.

8.1 Release Notes28 November 2024

NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

A new way of displaying sequential data: introducing angled links!

Whether visualising elements of an IT infrastructure, or as a way of understanding complex relationships between companies and their subsidiaries, hierarchical charts allow you to explore and understand connections and dependencies within the data.

Angled links provide an orthogonally branching link shape, designed to be used with hierarchical data. Like curved links, they are automatically aligned with the orientation of the arrangement or layout.

They are ideal for displaying charts that reflect multiple levels of dependency and can be used with combos to enable large, multi-layered systems to be viewed, explored and drilled down into.

Explore the use of angled links in the Path Analysis in Trees demo:

screen shot of path analysis demo

See also our new Link shapes documentation to learn more.

Links now have their own link shape property

We've extended the way you can specify shapes of links in a chart to be even more flexible, by adding a new property, linkShape, to links.

While previously you could only set link path shape at the whole chart level, and also at combo level, you can now also specify the link shape for individual links. This means that you can use link shapes to represent different types of relationship in the same chart, as illustrated in the Cloud Security demo:

screen shot of attack path in cloud security demo

Explore the use of mixed link shapes in the Mixed Link Shapes demo, and see the Using a mixture of link shapes documentation to learn more.

Prioritise links to give them better visibility

Links can be shown clearly to the front of the chart by setting link priority.

This can be particularly useful when using angled links, which often partly overlay one another, to help surface and highlight specific paths through your chart.

graph showing priority links in a sequential layout

The features described above are currently in beta, which means that they are fully tested and safe to deploy to production, but we may still introduce breaking API changes in future versions. If you have any early feedback to help us refine them, please contact us.

Updated Vue tutorial

Following previous updates to other tutorials, we've now also modernised our Using KeyLines with Vue guide:

  • The Vue tutorial now uses Vite as a build tool to benefit from the package manager's quick setup and modern development features.
  • The tutorial shows how to transform your raw data into a KeyLines-required format.
  • The tutorial now has even more useful content, including steps for visualising item metadata and styling the chart with chart options.
  • You can now copy all code snippets to your clipboard easily by clicking the button in the top-right corner of each code block.

Enhancements

  • The technology behind the KeyLines Playground has been updated and improved, loading more quickly to provide a better development experience.

Known Limitations

  • Using flow on angled links is currently not supported. We are working to add this feature in a future release. For more details, please contact us.

Bug Fixes

  • Fixed an issue where adding a set of glyphs on nodes could sometimes make the chart unresponsive.

KeyLines 8.0: Build compelling narratives with annotations10 October 2024

NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

When visualising connected data, a beautiful chart is just the beginning — the next step is to tell the story behind the data.

KeyLines annotations bring a new dimension to graph visualisation, fitting seamlessly into your application and elevating your workflow.

Annotations add a narrative layer to your charts so that you can analyse, capture, discuss and share insights directly within the chart. You can annotate nodes, links and combos, and annotations will stay readable at any chart size and zoom level. For added context in documents or presentations, you can also export annotated charts using chart.export().

Start exploring annotations in our brand new Annotating Charts demo.

Annotations for any use case

screen shot of annotation in cloud security demo

Turn your AI-generated or algorithm-based alerts into chart annotations and draw the attention of chart users to the most important parts of your network.

Through the power of KeyLines events, you can add interactive elements on annotations to allow your end user to deal with these alerts, creating an end-to-end in-chart process for visualising and resolving network alerts.

See an example of this in our updated Cloud Security demo.

Annotations can also be used to display real-time insights in a collaborative workflow between colleagues or investigators.

Thanks to the simple data-driven loading of KeyLines annotations, you can save and reload these user-generated or user-editable insights at a later time. To build on this workflow, you can export your chart with annotations into a shareable jpeg, svg, png or pdf format. Our new Annotating Charts demo shows an example of this create, edit and export workflow.

All levels of styling and customisation

You have full control over the styling of your annotations to create the look that suits your application design and interface.

The annotation body, styled in the annotation properties, can show any content including text, images, font icons, or even simple buttons created using annotation labels. You can also add your own controls such as editable text fields using an HTML overlay.

The connector, styled in the connectorStyle object, lets you customise how annotations link to their subjects so that the connection is immediately clear to the chart users.

To help you explore the full range of possibilities, we've developed a new suite of annotation demos:

See also our new Annotations documentation to learn more.

Annotations are currently in beta. They are fully tested and safe to use in production, but we may still introduce breaking API changes in future versions. You can share any feedback by contacting us.

Updated React tutorial

Following previous updates to other tutorials, we've now also modernised our Using KeyLines with React guide:

  • The React tutorial now uses Vite as a build tool to benefit from the package manager's quick setup and modern development features.
  • The tutorial shows how to transform your raw data into a KeyLines-required format.
  • The tutorial now has even more useful content, including steps for visualising item metadata and styling the chart with chart options.
  • You can now copy all code snippets to your clipboard easily by clicking the image of copy snippet icon button in the top-right corner of each code block.

Enhancements

  • We've now also added an annotation to the Interaction Events demo.
  • KeyLines fully supports Leaflet v1.9.x, and our SDK site now uses Leaflet v1.9.4.
  • We've updated our Welcome page with a fresh new design that looks great, highlights our key features and improves page navigation.
  • To continue improving security, consistency and quality of our codebase, we've added a new suite of scanners. Read more in the Security documentation.

Chart Export out of Beta

We're delighted to announce that after a period of improving, testing and implementing your feedback, the chart.export() function is now officially in General Availability as an established part of KeyLines.

Bug Fixes

  • Chart items with no type property are now always correctly omitted from the chart.
  • We've fixed various issues with alignment and positioning of styled node labels in sequential layout.
  • Labels with minWidth set to 'stretch' and w set to 'auto' now correctly ignore any value of maxWidth.
  • Nodes with styled labels are now always aligned correctly within the same level of the sequential layout.
  • Using chart.labelPosition() on labels positioned with number values now always works as expected.

Breaking API Changes

Like our previous major releases, KeyLines 8.0 contains some breaking changes. Without them, we couldn't evolve KeyLines and deliver the features you want. We recommend reading 8.0 Breaking Changes carefully before you install this version.

Deprecations

We've added some legacy APIs to our list of Deprecations.

Advanced Notice: Retirement of KeyLines LTAs

  • We intend to remove the KeyLines 5.10 LTA version from 1 October 2025.
  • We intend to remove the KeyLines 6.13.1 LTA version from 1 March 2026.

If you are using either of these versions, we strongly recommend upgrading to the latest version so that you can make use of the full features of KeyLines.

End of Support

The following previously deprecated APIs have now been removed and are no longer supported:

  • bind() events, deprecated since 6.0: replaced with on() events.
  • The tidy option in chart.layout(), deprecated since 6.0: use packing instead.
  • The dragPan chart option, deprecated since 5.5: use panAtBoundary instead.
  • The element argument of KeyLines.create(), deprecated since 5.3: use container instead.
  • The KeyLines.setSize() function, deprecated since 5.3: no longer needed when specifying a container in KeyLines.create().
  • The du property on nodes, deprecated since 5.3: no longer used.
  • The chart.getLastError() function, deprecated since 5.0: no longer relevant with the removal of bind and unbind events.
  • The assets option for KeyLines.paths(), deprecated since 5.0: no longer used.
  • The KeyLines.dashedLineSupport() function, deprecated in 4.8: no longer applicable to any supported browsers.

7.8 Release Notes11 July 2024

NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES
Version 7.8 is available as a Long Term Availability Release.

Add images to labels!

Screenshot of chart using image labels

You can now include images directly into your labels, giving you even more freedom to easily create unique, customised nodes.

Image labels can also be used in combination with other types of labels, so you can create beautiful, coherent, composite node labels made up of text, font icons and images.

Visit the Advanced Node Styles demo to see examples of how image labels can be used as a building block to create complex, meaningful node labels.

New tutorials to get you started quicker

To improve developer experience for anyone building their first application with KeyLines, we are modernising a number of tutorials from our Using KeyLines with... suite. Here are some of the changes we've made to our Javascript and Angular tutorials to make them even more helpful:

  • The Javascript tutorial now uses Vite as a build tool to benefit from the package manager's quick setup and modern development features.
  • Both tutorials now show how to transform your raw data into a KeyLines-required format.
  • Both guides now have even more useful content, including steps for visualising item metadata and styling the chart with chart options.
  • You can now copy all code snippets to your clipboard easily by clicking the Image of copy button button in the top-right corner of each code block.

Find out more in our Using KeyLines with Javascript and Using KeyLines with Angular guides.

Enhancements

  • The number of images and font icons that KeyLines supports in WebGL is now limited only by the user's hardware. KeyLines will performantly display up to 900 distinct images and font icons. Using more than this is not recommended as it may affect chart rendering performance. See WebGL Recommendations.

Bug Fixes

  • Nodes with dimensions set to 'auto', containing multiple positioned labels, are now sized correctly around their labels.
  • The TypeScript types for the overview and navigation chart options now correctly accept Boolean values.
  • Links between nodes in a single-level sequential layout are now always drawn correctly. (7.8.1. patch)

7.7 Release Notes22 May 2024

BUG FIXES

Bug Fixes

  • Closed combos with font icon or image styling no longer move chart items unnecessarily when opened and closed repeatedly.

7.6 Release Notes 24 April 2024

ENHANCEMENTSBUG FIXES

Expand your KronoGraph experience

Banner for KronoGraph product

Graph and timeline visualisations are a match made in heaven - they both have their unique strengths that can work together to create intuitive and versatile analysis tools.

If you want to learn more about KronoGraph, our timeline visualisation product, and also explore how seamlessly it can be integrated with KeyLines, head to our new Try KronoGraph page.

The new page contains an introduction to help you understand KronoGraph's main features, and also gives you access to a number of KronoGraph demos that feature both KronoGraph and KeyLines - Phone Call Analysis (formerly Timelines with KronoGraph demo on our site), Network Traffic Analysis and Anti-money Laundering.

You can visit this page any time by clicking the banners on the Welcome page and Demos page, or by clicking on the Timelines with KronoGraph demo thumbnail.

Enhancements

  • We've made improvements to the packing algorithm which means that using 'circle' or 'adaptive' packing may now be up to 40% faster for large datasets.
  • KeyLines now fully supports Leaflet versions 1.9.x.

Bug Fixes

  • Uncombining a combo, or transferring some of its child nodes out, now correctly resets the offsets of any links to its children.
  • Opening and closing combos with very large numbers of children is now more performant.
  • An aggregate link is no longer created if its id is already in use by a non-aggregate link, and a warning is shown.
  • Nodes with dimensions set to 'auto' are now sized correctly when they contain labels with textWrap set to 'normal'.
  • We've fixed some issues where child items or their decorations were not always fully contained within the parent combo's boundaries.

7.5.2 Patch Notes2 April 2024

  • Resizing a window on MacOS machines with a specific hardware setup no longer draws temporary artefacts on the chart.

7.5.1 Patch Notes18 March 2024

  • Our recommended version of PDFKit for PDF export is now v0.14.0. If you are using the previous recommended version 0.12.1, we encourage you to update to v0.14.0 as it addresses a vulnerability in a dependency of PDFKit.

7.5 Release Notes29 February 2024

NEW FEATURESDEMO CHANGESBUG FIXES

Sequential arrangement in open combos

Sequential is the most advanced layout for viewing and exploring tiered data: it is great at automatically placing nodes in the best positions, and can be customised in many ways. The new sequential arrangement now unlocks all of these possibilities for combos too, and lets you drill down into sub-hierarchies within your data.

Screenshot of demo that uses sequential in combos

You can set the sequential combo arrangement in the arrange option of the arrange(), combine() and transfer() combo functions, and also in the arrange option of chart.expand(). The arrange object accepts any options available for customising sequential layout including level, orderBy and others.

We've also added a new stretchType option for both sequential layout and arrangement that controls how individual levels are distributed when they contain items with varying sizes.

See the sequential arrangement in our updated Combo Options demo, or head to the Cloud Security demo which now uses the sequential arrangement to organise open combos and make them easier to interpret.

Smooth and adaptive sequential layout

Our sequential layout is now even better at handling data changes and small layout changes, making it more consistent and easier to follow even for dynamically changing datasets.

When running a full sequential layout using chart.layout(), setting the mode option to 'adaptive' ensures that sequential makes only necessary movements to adjust to data changes and preserves the relative positions of existing items in the component.

The improved behaviour is also applied by default when using chart.expand() to add new items, and results in much smaller and more incremental changes to the layout.

See the improved behaviour in the Adaptive Layouts demo.

Setting link shape inside open combos

We've redesigned and improved the way you can specify shapes of link paths in the chart.

While previously you could only set link path shape at the whole chart level, you can now use the new linkShape API to set it separately at chart level using chart.layout() or chart.expand(), and also at combo level using chart.combo().arrange(), and the arrange option for chart.combo().combine() and chart.combo().transfer().

When the linkShape option is set to 'curved', the orientation of curved links in the layout or inside open combos is automatically aligned with the relevant orientation option.

Enhancements

  • PDF export is now more robust as it no longer requires using blob-stream as a dependency, and it is easier to use especially when passing a custom PDFDocument. See it in the updated PDF Reports demo.

Deprecations

We've added some legacy APIs to our list of deprecations:

  • We've deprecated path option for linkStyle in chart.options(). Use the new linkShape API instead.

Bug Fixes

  • KeyLines now meets strict CSP directive for style-src.
  • Using chart.show() on very large networks using combos is now more performant.
  • Updating a node font icon using chart.animateProperties() now works as expected.
  • Uncombining multiple combos connected by large numbers of links is now more performant.
  • The TypeScript definition of chart.getItem() return types for a node now correctly includes x and y as required.

7.4.1 Patch Notes24 January 2024

  • The overview window contents is now correctly drawn over the chart in WebGL.
  • Aggregate links between nodes that are combined or uncombined are now always displayed correctly.
  • Deleting a node at one end of an aggregate link now correctly fires a link-aggregation event.

7.4 Release Notes6 December 2023

NEW FEATURESDEMO CHANGESBUG FIXES

New level of styling unlocked for open combos!

In this release, we bring you three beta features that we think you'll love - styling for open combos, glyphs for open combos and link aggregation.

Image showing open combos with styling

Open combos now support all of the styling features of the 7.0 Node Customisation release! Now you can organise your data while maintaining a consistent look and feel with the rest of your chart and application, by using features such as:

  • adding multiple labels on open combos
  • customising labels using the rich styling API
  • setting precise label positions with positioning API

We've added a new Cloud Security demo and updated our Network Alerts demo to show you examples of open combo labels. You can also head to the new Advanced combo styling documentation for more details, or see the changes in the oc property for open combo styling.

Based on a popular feature request, we've included a simple way to create a bar label that fills the whole height or width of a rectangular node or a rectangular open or closed combo. This label adjusts to any combo size but doesn't get overlapped by combo content, making it perfect to use for example as a header.

To turn a label into a bar label, simply set it to minWidth: 'stretch' or minHeight: 'stretch'.

And to round off the styling enhancements, we've also added a borderRadius property on open combos. This means that if your application design features rectangular shapes with rounded corners, you can now keep the corner styling consistent across labels, nodes, and open and closed combos alike.

You can find all the new features in our new Cloud Security demo that uses cloud infrastructure data and features modern rectangular design with rounded corners and styled labels.

Image showing open combos with glyphs

Glyphs on open combos

Glyphs are a powerful and versatile design element - you can use them as decoration, a source of information, but also as an interactive control with customisable actions.

Now you can take advantage of this also when styling your open combos. Add your glyphs in the g property for open combo styling and style and position them in the same versatile way as glyphs on closed combos.

The default red counter glyph is hidden on open combos. If you want to display it, you can set the comboGlyphOnOpen option to true.

If you happen to style nodes or combos with both glyphs and labels, you might find it useful to control their drawing order. By default, labels are drawn over glyphs, but if you set the legacyGlyphAndLabelOrdering option to false, the order will reverse and glyphs will be drawn over labels.

See the new glyphs in our Social Media Analysis demo, which has been treated to a complete styling overhaul.

Prune cluttered links with link aggregation

Our new link aggregation feature makes your chart clearer by summarising links between the same pairs of nodes or combos.

These aggregate links represent their child links and visually reduce the number of connections in the chart, but still contain all the data about the underlying links. You can turn on link aggregation in your chart by setting the aggregateLinks option to true.

If you have different types of links in your chart, you can also use the aggregateBy option to create more granular aggregation rules, and also set the aggregateByDirection option to create an aggregate link for each direction.

Aggregate links can be styled, for example to make them more informative at a glance by adding a dynamic width or a summary glyph, or to match them with an existing chart styling. Styling of aggregate links can be done in the event handler of the new link-aggregation event.

Head to the new Aggregating Links demo to try out different aggregating options, or read more about this feature in the new Aggregate Links documentation page.

Important information about beta features

  • All of the features in this release (styling for open combos, glyphs for open combos and link aggregation) are currently in beta. You can share any feedback by contacting us.
  • We have changed the default alignment of label borders which is in beta from 7.0. The inside of the label border is aligned with the inside of the parent node/combo border. Previously, the outside of the label border was aligned. To get the previous label position, add a label margin that equals to the label's border width. For more details or help, please contact us.

Bug Fixes

  • Setting the tiles map option repeatedly while also repeatedly showing/hiding map with show() and hide() no longer causes issues.

7.3.1 Patch Notes9 November 2023

  • Loading a chart fires a single view-change event.
  • Fixed various issues with bands and watermarks.
  • Combo size is always calculated correctly when a combo is closed.
  • The chart.worldCoordinates() function now correctly rounds outputs.
  • Opening and closing large combos with adapt set to 'all' is now faster.
  • Offsets of revealed combo links are calculated and drawn correctly regardless of the values of ids in end1 and end2.
  • Changing the tightness inside a combo with a concentric arrangement no longer causes unexpected movement of child items.
  • Loading items into chart using chart.expand() with animate set to false no longer causes unexpected movement.
  • The 'sans-serif' font is always used by default when a custom font is set incorrectly or doesn't exist and fails to load into the chart.
  • Updating a label for combo using chart.setProperties() now correctly updates the label for both closed and open combo states.

7.3 Release Notes31 August 2023

ENHANCEMENTSBUG FIXES

Access information from multiple sources with the new site search

Image showing site search in action

The KeyLines SDK site is a rich source of information about our features ranging from interactive demos to detailed documentation. To make sure you can access all the information quickly and easily, we've added a new site-wide search box in the top navigation bar that displays search results from the entire SDK site.

In addition to this, it also includes relevant Cambridge Intelligence blog posts and webinars so you don't miss out on any useful information from our website.

Enhancements

  • We've made significant improvements to performance when adding datasets with a very large number of links into the chart using merge().
  • We've addressed an issue caused by a change to our existing external source of default map tiles. As a result, KeyLines now uses OpenStreetMap, licensed under the ODbL License, as the default map tile provider. We recommend that you set your own provider in the tiles property or check that your use is in accordance with the Tile Usage Policy before you deploy your charts with map mode to production.

Bug Fixes

  • Exporting charts with curved links and colour gradients no longer causes an error.
  • Panning and zooming a chart containing a large number of open combos is now more performant.
  • Using the sequential layout with a tightness value of 4 or less now produces the expected amount of space between items.

7.2 Release Notes12 July 2023

NEW FEATURESDEMO CHANGESBUG FIXES

Rectangular combos in top shape and out of beta!

After a period of improving, testing and implementing your feedback, rectangular combos are now officially in General Availability as an established part of KeyLines.

In this release, we have made rectangular combos even more customisable with the new tightness option for combos. Available for both circular and rectangular combos, tightness lets you control how tight or spread out the items are when they're arranged inside the open combo.

The new API is available for arrange(), combine() and transfer() combo functions, and also for the arrange option of chart.expand().

Try out different combo combinations with tightness in the updated Combo Options demo, and see how we integrated the option in the Arranging IT Networks demo.

Improvements to layout tightness

  • When you specify a tightness setting for a structural layout, the spacing between leaf nodes now also reflects this. Explore these changes in the updated Layouts demo.
  • Similarly, when you specify a tightness setting for a sequential layout, with the stacking option set to grid, the spacing between the stacked nodes now also reflects this.

Bug Fixes

  • Using chart.expand() to add a large number of items to a combo no longer causes a performance issue.
  • Zooming with very small bordered labels in WebGL now produces consistent results at all levels.
  • Loading images into a chart that uses adaptiveStyling no longer causes a brief opaque flicker.
  • Using the KeyLines Angular component in angular-keylines.ts within an Angular application no longer causes repeated triggering of Angular's change detection.
  • KeyLines package downloads no longer occasionally report an error when unpacked.

7.1 Release Notes24 May 2023

NEW FEATURESDEMO CHANGESENHANCEMENTSDOC CHANGESBUG FIXES

Sequential layout improvements

Control over items order in sequential

The orderBy property available for the sequential layout when running chart.layout() or chart.expand() now offers even more flexibility when ordering your items within the sequential's levels. The property can now also be set to an object that accepts a new sortBy option where you can set whether the order should be ascending or descending.

Try it out in the updated Display Hierarchies demo.

Sequential layout performance improvements

We've improved the way sequential layout automatically calculates positions of nodes in the hierarchy if no distinct levels are set. As a result, running a sequential layout with no set levels is now typically 2x - 5x faster.

Image illustrating the new React Integration demo

React Integration demo with font icons and tooltips

The former 'React Integration' and 'React Integration: Time' demos are now merged into a single React Integration demo which now also uses font icons and tooltips to help you implement even more features.

Enhancements

Bug Fixes

  • Fixed an issue where setting node width and height to 0 for certain nodes in a chart could sometimes make the chart unresponsive.
  • Fixed some issues where fading effect during adaptive styling wasn't correctly applied on some elements.
  • Fixed an issue where running an organic layout with mode set to 'adaptive' on very large networks could sometimes make the chart unresponsive.
  • Fixed an issue where revealed links were backgrounded with a different background alpha opacity than regular links.
  • Fixed an issue where positioning a label using { vertical: 'inherit' } didn't have any effect when it followed a label positioned with a compass point value.
  • 7.0.1 Patch Notes16 March 2023

    • Fixed an issue where simultaneously adding items with partial or invalid styling into new and existing combos could make the chart unresponsive.
    • Fixed an issue where combining a child combo inside an unstyled parent combo could sometimes override the parent combo open label with the child combo open label.

    7.0 Release Notes27 February 2023

    NEW FEATURESENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES

    KeyLines 7.0 - A new era of node styling

    Screenshot of chart with styled rectangular nodes

    If you can design it, we'll help you implement it

    With design and UX departments often involved in the early stages of development, integrated development kits are under close scrutiny to align with the design language of their customers' applications, and to provide an intuitive user interface and a great user experience. This is where KeyLines 7.0 comes in - to help you implement any design vision without compromises.

    To complement designs with modern shapes, we're introducing new rectangular nodes. These nodes, which can even by styled to have one or more rounded corners, retain the same adaptive abilities and behaviour as the default circle nodes. In addition, they offer even more space to display information and look especially sleek in combination with our rectangular combos or with our sequential layout.

    We've also made two major improvements to node labels and their styling, making labels the pefect tool for infinitely flexible node customisation. These improvements are adding the option to create multiple labels on a node and adding an extensive label styling API. With these two improvements, you can now get more information-rich and styling-rich nodes that will make your charts fit seamlessly into your application.

    And last but not least, because nodes can now have any number of labels, labels can now also be a lot more than just a source of information. You can use them to add the finishing touches to your node styling, or even use them as user interface elements with custom interactions and interaction styling.

    Sounds good so far? Here are some more details:

    New rectangular nodes

    Image showing rectangular nodes with advanced label styling

    To create rectangular nodes, set their width and height in the w and h properties. You can also set a custom radius to make one or multiple corners rounded using the borderRadius property.

    For examples of rectangular nodes, head to our new Advanced Node Styles and Detail on Zoom demos, or see the updated Impact Analysis and Arranging IT Networks demos.

    Unlocking the multiple label API

    The existing t property has been updated to enable adding multiple text or font icon labels on a node. While previously, the property only accepted a string as a label, the t property now also accepts an array of objects where each object is a node label.

    In a t property array of objects, each object can have a nested t string property, making it a text label, or an fi property, making it a font icon label. In addittion to these, each label object can contain additional styling properties from our new node label API to further style the text label or the font icon.

    To see what the new API looks like, take a look at the examples in the brand new Advanced Node Styles demo or in the updated Node Styles demo.

    Advanced label styling

    We've added a number of new properties to give you more flexibility when styling your node labels. With the new APIs, you can for example:

    • Place the labels exactly where you want them inside or outside nodes using the position property.
    • Fine-tune the look of labels inside nodes by adding custom padding and margin and control their content with the textWrap property.
    • Keep the label size optimised regardless of its content by setting the fs property to 'auto', and by using the minHeight, maxHeight, minWidth and maxWidth properties.

    The list doesn't end there - for a full list of what's new, go to the Node Label API Reference or our new Advanced label styling documentation.

    Adding custom actions to labels

    As you're no longer limited with the number of labels your nodes can have, you can use labels to complete or even change the styling of your node, add unique elements, or add user interface elements you couldn't achieve before. Here's a few outside-the-box examples of what labels can also be:

    • multicolour node background (an empty label with set fbc used as a colour block)
    • progress bars or stack bars (a label whose width changes depending on the value in the node's d property)
    • buttons with custom interaction styling (using the click and hover events)

    Get started with the new APIs

    The multiple label and label styling APIs are straightforward to use whether you're starting from scratch or updating an existing code.

    To enable multiple label API and flexible label styling, wrap your existing label or font icon inside an object and place it in a t property array of objects, for example:

    t: [
        { t: 'label1' },
        { fi: { t: KeyLines.getFontIcon('fa-user') } }
    ]

    For more examples and a full list of new APIs, see the Node Label API Reference.

    Note that multiple label API and label styling API are currently in beta. You can share any feedback by contacting us.

    Enhancements

    • Asynchronous functions are now promisified by default. If you're using KeyLines with promises, you don't need KeyLines.promisify() anymore. You don't have to change your code but you can remove your call to the function. If you want to continue using callbacks, see Using KeyLines with callbacks.
    • The value of the d property is no longer deep cloned when the property is imported to the chart model or retrieved from it, improving the memory usage and performance of KeyLines.
    • Organic, our recommended force-directed layout, is now the default layout when running chart.layout() or chart.expand() without a set layout.
    • If a chart background colour is set in the backColour property, the same colour is set by default in the overview window backColour property.
    • We've added a number of Playground improvements such as an option to format code in the Code and Data tabs using Prettier.
    • KeyLines now uses Leaflet v1.9.1.

    Bug Fixes

    • Fixed an issue with using chart.serialize() on charts in map mode.
    • Fixed an issue where warning advising the use of 'willReadFrequently' was appearing in the developer console.
    • Fixed an issue where donuts inside combos didn't scale correctly during open/close combo animations.
    • Fixed an issue where removing a donut border on a closed combo by setting the bw property to 0 also removed the border of an open combo.
    • Fixed an issue where information about nodes returned by chart.combo().info() didn't contain d properties whose values started with an underscore.

    Breaking API Changes

    Like our previous major releases, KeyLines 7.0 contains some breaking changes. Without them, we couldn't evolve KeyLines and deliver the features you want. We recommend reading 7.0 Breaking Changes carefully before you install this version.

    Deprecations

    We've added some legacy APIs to our list of deprecations:

    • 'standard' and 'tweak' layouts
    • KeyLines shape nodes
    • tc node property
    • re option
    • chart.contains() function

    If any of these features are important to you, please contact us so we can prioritise them.

    End of Support

    • KeyLines support for Internet Explorer 11 has now ended.
    • KeyLines 4.8 LTA support has now ended and and the version has been removed.

    6.13 Release Notes26 October 2022

    DEMO CHANGESBUG FIXES
    Version 6.13 is available as a Long Term Availability Release.

    The next level of timeline analysis with KronoGraph 2.0

    We've updated our Timelines with KronoGraph demo to use KronoGraph 2.0.

    The latest version of our timeline visualisation toolkit introduces major improvements to viewing data and interacting with it. KronoGraph now draws all entities and their events in the timeline, which gives you an instant overview of your dataset.

    To navigate through the overview, it uses a brand new lens feature that lets you enlarge a smaller set of entities, scroll, and locate and investigate any interesting data points. At the same time, lens view keeps the context of where you are in your data, so you can work efficiently even with large datasets.

    Bug Fixes

    • Fixed an issue where truncating long labels could sometimes affect node spacing in the sequential layout.
    • Fixed an issue where links connecting nodes and combo nodes could sometimes be hidden unexpectedly during filtering.
    • Fixed an issue where links with flow animation weren't animated correctly when selected. (6.13.1 patch)
    • Fixed an issue where revealed combo links were sometimes layered incorrectly over nodes. (6.13.1 patch)
    • Fixed an issue where a marquee selection area could change unexpectedly while panning the chart beyond the extents of the view area. (6.13.1 patch)

    6.12.1 Patch Notes19 October 2022

    • Logging into the KeyLines SDK site is now done via Google authentication or email link authentication. We've made some infrastructure updates to enable this feature.

    6.12 Release Notes27 September 2022

    NEW FEATURESENHANCEMENTSBUG FIXES

    Explore demos from new angles in the KeyLines Playground

    Examining and editing a chart's code in the playground is a great way to explore features in KeyLines. In this release, we've unlocked a vast supply of examples to try out as our demos can now be opened in the KeyLines Playground.

    To open a demo in the playground, navigate to the Playground button located next to other tabs in the demo's right-hand side navigation panel. Clicking the button opens the demo in a new playground window where you can edit the demo's code. You can even access the demo's Data, HTML and CSS tabs and add your own data or code there, which is completely secure as everything is encoded in the URL of the playground and no data or code are sent to a server.

    Note that as a result of this more modern and convenient way of editing demos, we've now removed the possibility to download the demos.

    Bug Fixes

    • Fixed an issue where glyph borders didn't scale as expected during glyph animation.
    • Fixed an issue in WebGL where animated glyphs could sometimes move unexpectedly.
    • Fixed an issue where spaces between multiple text lines didn't scale as expected during node resizing.
    • Fixed an issue where the position of self-links on text-only nodes didn't scale as expected during node resizing.
    • Fixed an issue where adding a large number of unconnected nodes to a chart could cause the chart to become unresponsive.
    • Fixed an issue where removing previously set flow animation velocity on links didn't decrease the level of CPU usage as expected.

    6.11 Release Notes27 July 2022

    NEW FEATURESDEMO CHANGES

    Full control over rows and columns in combos

    If you use grid arrangement to arrange the content inside your open combos, you can now also try the new gridShape option to control the number of rows or columns.

    The gridShape option, which can be specified in several combo handling functions and in chart.expand(), accepts an object where you can set the rows or columns options to a suitable number.

    Defining a custom grid dimension such as a single row or a column can be especially useful to visualise flows, processes or supply chains within a larger hierarchy, especially when paired with our sequential layout. It can also help scale your combos for better fit and readability.

    To try it out, head to our updated Combo Options demo.

    6.10.2 Patch Notes6 July 2022

    • We've made some improvements to our Upgrading documentation for a better upgrading experience.

    6.10.1 Patch Notes6 June 2022

    • Fixed an issue where simultaneously opening multiple nested rectangular combos could sometimes produce unexpected results.

    6.10 Release Notes24 May 2022

    NEW FEATURESENHANCEMENTSBUG FIXES

    Get creative with the KeyLines Playground!

    KeyLines now comes with its own Playground, an interactive code editor and live visualisation tool.

    When you open a playground, you can build or edit a KeyLines application directly in your browser and instantly see the results. Your code is executed only in the browser, which means that no data is stored or sent to a server. As a result, the playground is completely secure to use even with your own data. And it's straightforward, too - all you need to do is convert your data into the KeyLines JSON format that describes nodes and links and paste it in the Data tab.

    Each time you run your code, the data and code are encoded into the page URL which you can bookmark, save or share with others.

    Use playgrounds to collaborate with others or to ask for support - if you send us a support query with your issue in a playground, we can see what’s going on and we can get back to you with a working code solution.

    To open a new playground, navigate to Playground in the top menu bar of the SDK site.

    Faster and smoother installation experienceImage showing the associated product logos

    For a faster and more modern installation experience we now deliver KeyLines as a Node.js compatible package in a .tgz format. The KeyLines package is compatible with all popular Node.js package managers such as npm or yarn.

    The package comes with both ESM and UMD bundles of KeyLines to make it easier to integrate into modern JavaScript applications.

    We've also updated all of our framework wrappers (Angular, Vue, React) to use this modern approach, which will give you a better experience when integrating KeyLines with these frameworks.

    For more detailed information see our updated installation guides in the Installing KeyLines section of the Documentation. We've also added two brand new installation guides for popular module bundlers: Using KeyLines with Webpack and Using KeyLines with Rollup.

    Note that to allow the download to be installed easily, the KeyLines download is now provided as a .tgz file rather than a .zip file.

    For backwards compatibility, the keylines.js file is still available in the same folder, and can be used exactly as before.

    Enhancements

    • We've made some minor improvements to the API Reference. These include improved styling, text formatting, and providing more detailed information, e.g. about the possible string values of API options.

    Bug Fixes

    • The orderBy option for chart.expand() is now correctly included in the API Reference documentation and TypeScript definitions.

    6.9.2 Patch Notes29 March 2022

    • Fixed an issue with sequential layout where using automatic level detection on certain data inputs could sometimes result in an error.

    6.9.1 Patch Notes24 March 2022

    • Fixed an issue with internal tooling on the SDK site. There are no changes to the KeyLines package.

    6.9 Release Notes7 March 2022

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Stacks of improvements for sequential layout

    Hierarchical data with wide trees of nodes and densely populated levels can be very difficult to analyse when viewed in full. This is because wide layouts often need to be zoomed out to fit the items in, offering very little detail without any additional scrolling or zooming.

    In the new stacking property, you can now set the arrange option to 'grid' to stack groups of same-level nodes with identical neighbours into neatly organised grids. This will give you a full view of the layout at a much more readable zoom level.

    In addition, the existing packing option now also applies to the sequential layout. While by default, sequential still aligns nodes on the same level across components, you can now choose the way you pack the components in your chart to use your screen space even more efficiently.

    See how these new features instantly transform a challenging sequential layout in our brand new Navigate Large Hierarchies demo.

    Note that if you are setting packing for all layouts, the setting will now also apply to the sequential layout. If you want to keep the previous behaviour, set packing to 'aligned' for sequential.

    Ordering nodes within sequential levels

    In another useful improvement to our sequential layout, we've added a new orderBy property to help you organise nodes within each level of sequential. This property specifies which property in a node's custom data object is used for ordering. Either strings or numbers can be used for ordering.

    Head out to our Display Hierarchies and Impact Analysis demos which use this new feature.

    CORS mode for loading external images

    The new KeyLines.corsAdapter() function lets you set the value of the crossorigin HTML attribute whenever KeyLines is trying to access an image from a third-party domain. This allows you to configure the CORS requests sent by KeyLines to include user credentials when accessing secure resources behind authentication requiring cookies.

    Enhancements

    • Improvements to consistency of spacing between levels in the sequential layout.
    • Improvements to symmetry between same-level child nodes with the same parent in the sequential layout.
    • Various improvements to the way sequential layout identifies nodes with identical connections for better positioning and fewer link crossings.

    Bug Fixes

    • Fixed an issue with exporting very short links with a dashed line style.
    • Fixed an issue where rotated font icons were not always exported correctly during PDF export.
    • Fixed an issue where adding previously removed nodes back to the chart could cause positioning errors.
    • Fixed an issue where running the Vue.js Integration demo locally in some combinations of operation systems and browsers could fail to show font icons.

    6.8.1 Patch Notes2 February 2022

    • Fixed an issue with a discontinued external source of map tiles for the Map Layers demo.

    6.8 Release Notes2 December 2021

    ENHANCEMENTSDEMO CHANGESBUG FIXES

    Supercharging KeyLines layouts

    There is no such thing as too much performance, especially when you're working with very large datasets. To make your applications run faster and smoother, we've significantly improved the performance of two of our popular layouts - lens and organic.

    Image showing chart representing a very large dataset

    Organic

    The updated algorithm of our organic layout now requires up to 15% fewer position calculations which noticeably decreases the amount of time needed to complete the layout. In addition, adding or expanding items is now also 25% to 200% faster and results in less movement while the layout adapts to changes, as you can observe for example in our Adaptive Layouts demo.

    Lens

    The performance of our lens layout has increased by 500% compared to previous releases with especially notable differences for very large datasets. As lens is also used by default inside our circular combos, creating combos is significantly faster and combo interactions are even smoother than before.

    Vue Integration demo with font icons and tooltipsImage illustrating the new Vue integration demo

    With the release of Vue 3, we took the opportunity to overhaul and enhance our Vue integration demos.

    The former 'Vue.js Integration' and 'Vue.js Integration: Time' demos are now merged into a single Vue.js Integration demo which now also uses font icons and tooltips to help you implement even more features.

    As the KeyLines Vue component now supports Vue 3, we've also updated the demo to use Vue 3.

    Bug Fixes

    • Fixed an issue where TypeScript ComboAdaptMode type was not correctly defined.
    • Fixed an issue where hiding multiple items at once could trigger multiple selection-change events.
    • Fixed an issue in WebGL mode where setting backgroundAlpha did not always update chart.
    • Fixed an issue in map mode where modifying the node position using setProperties could result in links being hidden after switching to network mode.
    • Fixed an issue where calling timebar.setContainer() did not always correctly update the element containing the time bar.
    • Fixed an issue where image dataURLs containing unencoded SVG icons did not always load correctly.
    • Fixed an issue with navigation bar not displaying correctly in Safari.

    Advanced notice: Retirement of KeyLines 4.8 LTA

    We intend to remove the KeyLines 4.8 LTA version from 1 November 2022.

    If you are using this version, we strongly recommend upgrading to the latest version so that you can make use of the full features of KeyLines.

    6.7 Release Notes30 September 2021

    NEW FEATURESDEMO CHANGESENHANCEMENTSBUG FIXES

    Generate captivating PDF documents with chart export

    The chart.export() function now also generates static images of charts in PDF format offering you even more ways to present, share or publish your KeyLines charts.

    Image showing a sample PDF exported from a chart

    To get started, add the required dependencies to your application and set the type option for chart.export() to 'pdf'.

    KeyLines gives you full control over the appearance of the output to ensure that your generated documents suit your needs and requirements perfectly. You can use the doc option to pass a custom PDFDocument from PDFKit with your own specification, taking advantage of any features of the PDFKit API to create tailor-made documents with custom look and feel.

    To give you some inspiration we've added a PDF Reports demo featuring examples with various fonts and layouts. We've also updated the existing Export Chart demo to offer PDF export.

    The chart.export() function, including PDF export, is still in beta. You can share any feedback by contacting us.

    Please note that, as set out in the Third Party Libraries page of our SDK site, the optional functionalities of PDF export and map mode require the use of open source dependencies.

    Enhancements

    • We've added new documentation pages on Chart Export and PDF Export to help you learn more about these features.
    • We've added a new extents option for chart.export() that lets you specify whether you want to export the whole chart or its current on-screen view.

    Bug Fixes

    • Fixed an issue where adding to selection via marquee box could sometimes leave intermittently selected nodes in the final selection.
    • Fixed an issue in WebGL mode where long Arabic strings with numbers could sometimes be ordered incorrectly when using auto RTL.
    • Fixed an issue where glyphs with non-integer radii were not always reported correctly.
    • Fixed an issue where KeyLines.mode() set to 'auto' did not fall back to canvas mode when hardware acceleration was disabled in Chrome v93 and Microsoft Edge v93.

    6.6 Release Notes23 August 2021

    NEW FEATURESDEMO CHANGESBUG FIXES

    Rectangular combos looking sharp in beta

    Thanks to your feedback, we've improved rectangular combos and grid arrangement and we are moving them to beta, which means they are stable and ready for production.

    Screenshot showing new rectangular nodes

    The updated grid arrangement for rectangular combos now preserves the clean grid view with zero overlaps even after actions such as opening or closing combos or transferring items.

    We've also added a new adapt option for a number of combo handling functions and chart.expand. The option lets you control how items at the top chart level or inside parent combos adapt to combo or child combo changes. You can use it to partially or completely disable this behaviour, which may be useful for example to preserve the top level layout or to rearrange items manually.

    By setting adapt to 'inCombo' when using rectangular combos with sequential, the sequential layout is preserved throughout any combo actions, making the chart look smart and polished at all times, just like in our Arranging IT Networks demo.

    See also the Combos: Basic and Combos: Reveal Links demos for even more examples of rectangular combos.

    Note that we've made 'grid' the default arrangement option for rectangular combos (i.e. when the combos option is set to 'rectangle').

    Angular Integration demo with font icons and tooltipsImage illustrating the new Angular integration demo

    With the release of Angular 12, we took the opportunity to overhaul and enhance our Angular integration demos.

    The former 'Angular Integration' and 'Angular Integration: Time' demos are now merged into a single Angular Integration demo which now also uses font icons and tooltips to help you implement even more features.

    As the KeyLines Angular component now supports Angular 12, we've also updated the demo to use Angular 12.

    Bug Fixes

    • Fixed an issue where running chart.expand in some charts consisting of only single node components could cause overlapping.
    • Fixed an issue with chart.export where exporting strings with commas into SVG could fail to export commas.
    • Fixed various issues with text alignment and font icon alignment when using chart.export.
    • Fixed various issues with dragging during the view-change event.
    • Fixed an issue with slow loading performance of images on nodes.

    6.5 Release Notes3 June 2021

    NEW FEATURESDEMO CHANGESBUG FIXES

    Dark mode has arrived in KeyLines

    Image showing new dark mode for charts

    In the past few years, dark mode has undoubtedly become one of the most popular features in user interface design.

    In response to popular demand, KeyLines now offers a quick and easy way to switch the theme of its navigation tools (i.e. chart navigation controls, time bar control bar and the overview window) to dark mode so that they integrate seamlessly into your dark mode styled apps without any need to create custom navigation tools.

    To do this, simply set the new controlTheme option for chart and controlBarTheme option for time bar to 'dark'.

    We've also updated our own dark mode demos to use this - for example Bitcoin Transactions, Arranging IT Networks, Filter Data Breaches or Impact Analysis.

    Organic layout out of Beta

    We're happy to announce that after a long period of improving, testing and implementing your feedback, the organic layout is now officially in General Availability as an established part of KeyLines.

    Even more so, it is currently our fastest and most versatile force-directed layout. It adapts incrementally to the data changes, allowing you to focus without any disruptive movement, and delivers great results even when used with very large and complex datasets.

    See how it handles the challenges of network change and large data in our Social Network Analysis, Mafia Network and Visualising Big Data demos.

    Advanced notice: End of support for IE11

    We intend to end support for Internet Explorer 11 from 31 October 2021.

    For a list of supported devices, operating systems and browsers, see Compatibility & Supported Platforms.

    Bug Fixes

    • Fixed an issue in WebGL mode where strings starting with space-separated numbers could sometimes be ordered incorrectly when using auto RTL.
    • Fixed an issue in WebGL mode where forced RTL mode could sometimes be ignored and RTL auto mode be used instead.
    • Fixed an issue in sequential layout that could sometimes prevent it from correctly removing some link crossings and in some cases could cause the chart to become unresponsive.
    • Fixed an issue where running a layout with packing set to 'circle' or 'adaptive' could cause the chart to become unresponsive in very specific circumstances.
    • Fixed an issue where some special characters did not always export correctly into SVG when using chart.export().

    6.4 Release Notes22 April 2021

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Simplified language support with RTL auto

    Sometimes the best features are the ones you don't even have to think about implementing.

    Image of nodes containing automatically-detected RTL text

    This is why KeyLines now supports automatic detection of right-to-left (RTL) and bidirectional (BIDI) languages in both WebGL and Canvas.

    The RTL auto support is simply applied automatically once KeyLines detects any RTL characters, so you can be sure that any of your RTL and BIDI content is always displayed correctly without any need to set it.

    See it for yourself in our updated Multiple Languages demo.

    Note: To make use of the new behaviour, make sure you remove the dir attribute and direction css property from any KeyLines components.

    Tracking progress with organic

    Organic is already the layout to rely on when you have a large, complex dataset to visualise, and now it also offers a better user experience.

    Organic layout now supports incrementally reporting progress events, which give you more feedback on the progress when the layout is taking a while to run due to the size of the dataset. These events can be especially useful when running layouts for very large datasets, because you can use them to display elements such as a preloader or a progress bar and improve the user's experience.

    Take a look at an example in our Visualising Big Data demo.

    Enhancements

    Features out of Beta

    We're happy to announce that a number of features are out of Beta development. These are now established features of the KeyLines toolkit:

    Bug Fixes

    • Fixed an issue where SVG images could sometimes fail to load correctly.
    • Fixed an issue where expanding a single component with fixed nodes could cause unnecessary movement.

    6.3 Release Notes8 March 2021

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Exporting charts in high resolution and more output types

    When generating KeyLines charts for purposes such as printing or sharing, our customers rely on a high quality output that preserves all the information and high standard of the original and delivers a detailed and insightful result.

    This is why we are very pleased to introduce a brand new chart.export() function, which allows you to generate charts in high resolution and in several popular output types. For the first time in KeyLines you can now export to vector-based graphics, with support added for SVG, as well as higher resolution support for PNG and JPEG (to 16K). Regardless of the size of your dataset, this function will produce stunning results for your KeyLines charts in both chart and map mode.

    Currently in beta, you can try out the new features in our updated Export Chart demo.

    Organic responding to incremental changes

    Our organic layout is now even better at handling small changes in the layout. You will notice this improved behaviour for example during time bar animations, filtering or resizing items.

    To apply the new behaviour, set the new mode option to 'adaptive' when running chart.layout(). The 'adaptive' mode runs a short force-directed layout instead of a full one, adapting the layout to changes while preserving the original positions of items as much as possible.

    Think of it as an improved ‘tweak’ - the mode option is, in fact, available also for standard layout. For the best results in your charts, however, we recommend using organic as our currently most advanced force-directed layout.

    KeyLines with KronoGraph

    movie showing incremental layouts when using adaptive mode

    You may have already heard of KronoGraph, our new product for timeline visualisation.

    KronoGraph can also integrate with KeyLines, unlocking even more possibilities for analysis and visualisation of your data.

    Take a look at our exciting Timelines with KronoGraph demo to see both products working seamlessly together.

    Enhancements

    • We've improved organic to produce a more compact layout, whilst also reducing node overlaps, helping minimise white space and improving overall network clarity.
    • As organic is our recommended force-directed layout, even more demos are now using it as a default, showcasing also our new 'adaptive' mode behaviour - for example Social Network Analysis, Filter Data Breaches and Mafia Network.
    • Running chart.expand() with organic layout also uses the behaviour introduced with 'adaptive' mode for chart.layout(). For chart.expand(), this behaviour is applied automatically when fix is set to 'adaptive' (default option).

    Bug Fixes

    • Fixed a WebGL issue where passing an invalid value as colour to some objects on nodes could result in an error.
    • Fixed an issue where some items with dashed borders did not always render correctly.
    • Fixed an issue with selection of links created using createLink.

    6.2 Release Notes1 December 2020

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Rectangular combos: A brand new angle on combos

    We’re very excited to add a brand new look to one of our signature features.

    image of rectangular open combo containing rectangular nodes

    In the combos chart option, you can now set the shape of your open combos to 'rectangle'. The items inside each open combo can be arranged using any layout available for arranging nodes inside open combos. To achieve the most compact layout, try the new grid arrangement that we've introduced to complement rectangular combos.

    In addition to their modern and crisp design, our rectangular combos excel in providing a clear, condensed view of the data and its context, especially when used with our sequential layout. Check out the new Arranging IT Networks demo to see how much detailed information can be displayed at once without losing clarity in your chart. To create your first rectangular combos, head to our Combos: Basic demo.

    This feature is currently in alpha and we're keen to hear from you about how we can improve it. To share your feedback, please contact us.

    Enhancementsneo4j logo

    We've updated our Integrate with Neo4jdemo to use Neo4j 4.1.

    Bug Fixes

    • Fixed an issue where large circular combos containing small numbers of nodes sometimes contained too much padding.
    • Fixed an issue where destroying a chart during a running layout could produce an error.
    • Fixed an issue where links were sometimes not revealed properly when drawn from within a combo.
    • Fixed an issue where a KeyLines chart could sometimes fail to resize correctly when its parent element was resized.
    • Fixed an issue where createLink could error when using curved links.
    • Fixed an issue where double-click events could fail to be generated in charts with high volumes of nodes.
    • Fixed an issue where very long curved links to glyph-only nodes sometimes failed to render correctly.
    • Fixed an issue where drag-over events failed to occur after chart.combo().reveal() was called when dragging a node.

    6.1 Release Notes29 September 2020

    NEW FEATURESENHANCEMENTSBUG FIXES

    Adding items to fixed charts

    Charts with components that don't move have their benefits - the components can be laid out manually to fit specific requirements and are always easy to find. However, having a fully fixed chart shouldn't compromise the readability of the layout when new items are added.

    movie showing the fix option when adding items

    This is why you can now add new items to your chart with the fix option for layout.expand() set to 'all' and not create any overlaps with your existing fixed components.

    To see the improved behaviour, head to our Adaptive Layouts demo.

    Reducing movement during expand

    No detail is too small when working on beautifully adaptive layouts. We've now improved the behaviour of layout.expand() so that when a single component is expanded, the movement of its existing nodes is reduced to necessary adjustments and the animation and fitting of the chart are subtler and smoother.

    Staying focused with organic

    Calling an organic layout with the consistent option set to true now always produces the same results for components in the chart that haven't changed. This means that running the layout only updates the positions of changed components, minimising any distractive movement in the chart and letting you focus on what has changed.

    Enhancements

    • The KeyLines Angular component now supports Angular 10.
    • The KeyLines Vue component now supports Vue 2.6.11.
    • We've improved the reliability of some multi-touch and simultaneous gestures, such as pinch-to-zoom or zooming during marquee or drag-panning.

    Bug Fixes

    • Fixed an issue where new items would not always stay in view as the view adjusts to fit.
    • Fixed an issue where the React component could unmount before KeyLines has fully loaded and produce an error.
    • Fixed an issue where using some TypeScript types could cause an issue in older versions of TypeScript.

    6.0 Release Notes13 July 2020

    NEW FEATURESENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES

    KeyLines 6.0: Event of the Year

    We’re delighted to bring you KeyLines 6.0, our latest release featuring a next-generation events engine, adaptive layouts, beautiful curved links and other exciting enhancements.

    chart illustrating curved links in an adaptive layout

    The evolution of events

    KeyLines 6.0 features a new events engine and a redesigned API for a better developer and end-user experience. The events, accessed from chart.on() and timebar.on(), are intuitive, easy to work with and simple to customise. Their improved behaviour is also more closely matched to the behaviour of native DOM events. Here are some highlights of the new system:

    Custom actions

    movie showing illustration of custom dragging

    Overriding the default behaviour is now simple and intuitive.

    All you need to do is call the preventDefault() function in the handler. Use the function to modify any behaviour - for example to have your nodes snap to a grid during dragging or to disable some user actions.

    Another useful addition is the new setDragOptions property of the drag-start event, which lets you customise the dragging behaviour. You can use it for example to enable panning of the chart while the pointer is over certain chart items.

    To see how this option works, head to our Custom Dragging demo.

    Fine-grained control

    Listen and respond to events with greater precision. We've improved events such as view-change and selection-change to work more intuitively and seamlessly, and added new events like drag-move and pointer-move to give you tighter control over user actions.

    As a result, chart items respond smoothly to user actions such as dragging, panning or selecting.

    Take a look at our new HTML Annotations demo for more details.

    chart with simple annotationsimage showing pointer events used with halos

    Intuitive behaviour

    We’ve listened to customer feedback and improved the order in which events fire. For example, click events no longer fire during dragging, the Ctrl and Cmd modifiers work more intuitively between Macs and PCs, and dragging nodes no longer automatically changes the chart selection.

    Unrivalled device and gesture support

    Experience smoother and more precise zooming, consistent touch gesture support and detailed contextual information from pointer events including modifier keys and pointer types. Whether you're supporting mobile applications, adding keyboard shortcuts for better accessibility, or adding custom interaction behaviours to your application, the new events engine gives you the control you need.

    Ready for your application

    Explore the new events in action in our demos, which have all been updated to use the new events engine. We especially recommend checking the Interaction Events demo and Time Bar Events demo which let you test events and user gestures while displaying the firing order and structure of the events.

    All the chart events and time bar events are documented in the API Reference and the new Events Basics page features an introduction to events and an overview of the differences between the bind() and on() events.

    Although you can still use the bind() API, which remains supported until the end of the 6.x cycle, we strongly recommend migrating to the new events as soon as possible.

    image of updated interaction events demo

    Make waves with curved links

    Refresh the styling of your sequential and hierarchy layouts with the new path option. Setting it to horizontal or vertical changes the way link ends enter and exit nodes, making the links follow a curve. This not only makes the layouts look more polished, but also improves clarity and readability, especially for charts with multiple connections between levels.

    See the difference curved links can make in our Impact Analysis and Display Hierarchies demos.

    Adaptive and beautiful by default

    screenshot showing adaptive packing

    Achieving the best adaptive behaviour for dynamically changing charts should be easy and automatic.

    This is why expand() now uses adaptive packing with consistent layouts by default, which means that your chart will adapt beautifully to the new data with minimal movement of unrelated items.

    We have created a new Mafia Network demo to showcase the advantages of adaptive behaviour. Explore and disrupt connections within mafia networks to see the chart adapt to changes.

    Enhancements

    • KeyLines now supports the three-finger pan gesture across all touch devices.
    • KeyLines now supports the pinch-to-zoom gesture across all touch devices.
    • We've improved the behaviour of items dragged near the edge of the chart.
    • Dragging no longer updates selection, which means that you can drag items without losing your selection.
    • The new on() API comes with a number of new and useful events: drag-move, key-up, pointer-move and pointer-up.
    • The adaptiveStyling option is now true by default, which means that your chart will look at its best even at low zoom levels. You can switch to old behaviour by setting it to false.
    • The expand() function no longer waits for images to load when called asynchronously. Instead, the callback function is invoked after animation is finished.

    Breaking API changes

    Like our previous major releases, KeyLines 6.0 contains some breaking changes. Without them, we couldn't evolve KeyLines and deliver the features you want. We recommend reading 6.0 Breaking Changes and Migrating from bind() to on() carefully before you install this version.

    Deprecations

    We've added some legacy API calls to our list of Deprecations.

    Bug Fixes (6.0 and 6.0.1)

    • Fixed an issue for time bar where continuing to zoom out after reaching minimum zoom could sometimes cause the chart to keep updating.
    • Fixed an issue where running a radial layout sometimes failed to zoom the chart to fit.
    • Fixed an issue where large values entered in the animation time for chart.layout() were sometimes rounded down.
    • Fixed an issue when chart.expand() function waited for images to load when called asynchronously.
    • Fixed an issue where dragging a node out of a combo sometimes failed to fire a dragover event.
    • Fixed an issue where a node is dragged, and the initial dragover event of 'null' was not fired for the chart background.
    • Fixed an issue for time bar where removing playExtend could alter the play type.
    • Fixed an issue where clicking on a donut segment with only one non-zero value returned incorrect value for the clicked segment.
    • Fixed an issue where increasing the size of an overview window could produce an error.
    • Fixed an issue where pings were not drawn over the whole length of straight and arced links.
    • Fixed an issue where nodes were not repositioning correctly while zooming on a chart in map mode.
    • Fixed an issue where running a sequential layout with automatic level detection on cyclical data could result in an error.
    • Fixed an issue where dragging bounding boxes of shapes with font icons could resize the shapes incorrectly.
    • Fixed an issue where running a standard or structural layout did not always fire incremental progress events.
    • Fixed an issue for Windows 10 using IE 11 where dragging a shape could result in some parts of the content not dragging correctly.
    • Fixed an issue where some drag events could return incorrect drag types when firing in map mode.
    • Fixed an issue where running a sequential layout for datasets without a top node or specified levels could sometimes freeze the browser tab.

    5.10 Release Notes30 April 2020

    NEW FEATURESENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES
    Version 5.10 is available as a Long Term Availability Release.

    Adaptive layouts smarter than ever

    It can be difficult to keep up with data changes on your chart, and not every change needs a completely new layout. That's why KeyLines 5.10 introduces new adaptive behaviour for layouts, which will help your charts adapt to changes effectively while minimizing unnecessary movement, large gaps and overlaps.

    animated image showing adaptive layout

    With the fix option set to adaptive and the tidy option set to true, expanding or adding components modifies only the position of necessary items, leaving the existing nodes fixed in relation to others where possible.

    You can also set the packing option to adaptive and the consistent option to true when running layouts to adapt the chart when items are removed.

    To see this improved behaviour in action, take a look at our Adaptive Layouts demo.

    Stretching the capability of sequential

    We continue improving the sequential layout to make it even better for visualising your hierarchical data. The latest addition is the new stretch option which allows you to change spacing between levels of nodes in the layout.

    See how this affects the sequential layout in our updated Display Hierarchies demo.

    Overview window in colours

    overview window shown using customised colours

    The overview window is a helpful navigation tool which displays a thumbnail view of the chart with the currently viewed area highlighted. You can now customise its colours using the backColour and borderColour options. And you can finally have the overview window match your slick dark mode chart!

    Enhancements

    • We've added a new page on Graph Centrality where you can read about different centrality measures that KeyLines uses to identify important features of your network.

    Discontinued support

    Following our announcement in September 2019 and the direction given by operating system providers, we've discontinued support of the following operating systems:

    • Android: Android 5 (Lollipop)
    • Apple: iOS 11
    • Apple: OS X El Capitan, OS X Sierra
    • Linux: Ubuntu 14.04 LTS, Ubuntu 17.10

    For a list of supported devices, operating systems and browsers, see Compatibility & Supported Platforms.

    Bug Fixes

    • Fixed an issue where narrow shape node borders were not always drawn in WebGL mode after a zoom.
    • Fixed an issue with handling of false values passed as a colour in chart options.
    • Fixed some issues with reliability of sequential layout packing.
    • Fixed an issue where transferring of components between combos under certain circumstances caused double movement.
    • Fixed an issue where hover events on combos could be missed in WebGL mode.

    5.9 Release Notes27 February 2020

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Automatic sequential layouts

    Data often has a distinct structure, such as a hierarchy or sequence, which the sequential layout is perfectly suited for. With sequential's automatic level detection, you can now lay your data out straight away without the need to specify a top node or provide level information. Sequential intelligently puts nodes in levels based on the direction of links in your data.

    Sequential does this by default if the top or level options aren't set.

    sequential layout using automatic level detection

    You can still get the precise control of levels in sequential by using the top or level options. To see how the different methods compare, see the Display Hierarchies demo.

    New getItemInfoAt() API

    It can be tricky to test visual applications, particularly when they're complex. To assist with detecting the presence of items in the chart, you can now use the new getItemInfoAt() method to check what item is present at any given view coordinate.

    Bitcoin demo

    image of Bitcoin transactions demo

    Cryptocurrency data is complex and often difficult to follow, with transactions being lost in the sea of data.

    KeyLines can help to navigate blockchains by resolving entities and highlighting anomalies.

    See the Bitcoin Transactions demo to explore what insights can be gained from analysing cryptocurrency using a chart.

    Enhancements

    • Thanks to all your great feedback, the time bar's area mode is now out of alpha.
    • Reporting of drag events in map mode has been improved.
    • Sequential now supports rectangle and circle packing.

    Bug Fixes

    • Fixed an issue where arrowheads were sometimes drawn over selection markers.
    • Fixed an issue where locking the chart in map mode could cause unexpected behaviour.
    • Fixed an issue where combining a large number of nodes could result in an error.

    5.8 Release Notes9 December 2019

    ENHANCEMENTSDEMO CHANGESBUG FIXES

    More time bar styling options

    In the last release we introduced the new area mode for the time bar, letting you display your time-stamped data as a continuous area plot. We’ve now added curved selection lines to area plots to highlight important aspects of your data and see how individual items’ activity compares to the overall trend.

    time bar with new styling options

    As with the histograms, simply call timebar.selection() once you've set type to 'area' to see the evolution of a subset of your data.

    To see how these new line charts look, check out our Filter Data Breaches demo.

    New packing options

    Packing is a key component of layouts, ensuring that unconnected components are placed in just the right place so they don't overlap or appear too far apart.

    Now you can customise what type of packing to use on almost all of our layouts, with the circle packing option now also available for the standard, structural, radial and hierarchy layouts.

    complex chart with default packing option
    complex chart with new circle packing option

    Enhancements

    • Our site demo pages have been updated. You can now switch between demo controls, informative text and source code on the tabs on the right hand side.
    • Rectangle packing has been improved for all our layouts, reducing excess space between components.

    Bug Fixes

    • Fixed an issue where certain invalid property inputs sometimes caused the chart to enter a broken state.
    • Fixed an issue where the drag-over event would sometimes not fire correctly.
    • Fixed an issue with the consistent option not always being applied during chart.expand().
    • Fixed an issue where loading some data types could cause the chart to become unresponsive.
    • Fixed an issue where certain inputs could cause the time bar to become unresponsive when viewed as an area plot.
    • Fixed an issue when exporting the chart would sometimes draw background items incorrectly.
    • Fixed an issue where laying out an empty chart could cause it to become unresponsive.

    5.7 Release Notes24 October 2019

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Stacks of time bar improvements

    The time bar is a great way to show how your data evolves through time. In KeyLines 5.7 we've added more features to the time bar to give your users more value, and more ways to show your data.

    Histogram bars can now be displayed as stacked bars, showing a breakdown of the types of data they contain. Simply include the names of groups in a custom property of items, and then define which property to use with the groups time bar option. This can be really useful if you want to highlight what's changed inside the data, or to focus a user's attention on a subset.

    time bar using stacked bars

    Take a look at the fully-customisable stacked bars in our Customise the Time Bar demo.

    Area Plots

    In addition to stacked bars, the time bar now features an entirely new way to display data; area plots. By setting the type property to 'area', you can now see your temporal data as a continuous evolution. This is great when you want to see a more qualitative view of how your network changes over time, and can make it easier to spot patterns that would be hidden in an aggregated histogram view.

    You can check out the new area plots in our Styling Charts demo.

    Enhancements

    • The performance of circle packing in organic layout is now faster.
    • All our database demos and documentation have been modernised.
    • Expand is now more intelligent when placing new nodes.
    • The packing in lens layout is now more robust.

    Bug fixes

    • Fixed an issue where certain level values could cause the sequential layout to behave unexpectedly.
    • Fixed an issue with sequential layout where links could be drawn incorrectly in some circumstances.
    • Fixed an issue where truncated labels could cause unexpected results in the structural layout.
    • Fixed some issues where certain emojis could be drawn incorrectly.
    • Fixed an issue where invalid data could cause a time bar error.
    • Fixed an issue where spacing was sometimes irregular in sequential layouts.
    • Fixed an occasional performance issue in WebGL.
    • Fixed an issue where some minifier settings could conflict with Leaflet.

    5.6 Release Notes5 September 2019

    NEW FEATURESENHANCEMENTSDEMO CHANGESBUG FIXES

    Accelerated organic layout

    We are always striving to improve KeyLines and make it as quick and efficient as possible. The organic layout is now even faster, with typical performance increases between 2 and 5 times. For some networks this can be even greater, with certain benchmarked networks over 100 times faster than before.

    image of chart generated from very large dataset

    Organic is ideal for getting a clear and attractive layout for large, complex networks in record time, and we recommend using it in place of the standard layout.

    Enhancements to sequential layout

    We are happy to announce that the sequential layout is officially out of beta development and is now an established part of the KeyLines toolkit.

    Sequential has been significantly enhanced, and you can now use it on nodes with incomplete or missing level data by simply defining a top node, just like the hierarchy layout. Sequential will then intelligently place nodes on appropriate levels based on their connected items.

    image showing enhanced sequential layout

    Take a look at our Layouts demo to see how easy using sequential is.

    Prevent dragging of links

    Working out the right behaviour for your chart can be tricky. The new drag option allows you to customise more precisely how your users interact with the chart, ignoring links when you drag and using hand or pointer mode to control how click events work.

    This feature is currently in alpha and we're keen to hear any feedback you have on how we can improve and enhance it.

    TypeScript out of alpha

    image of TypeScript code snippet

    TypeScript continues to grow in popularity, and we're now using it in-house to write KeyLines. We're pleased to announce our TypeScript definitions for the KeyLines API are now out of alpha. If you're using TypeScript, you can now benefit from context-sensitive API documentation and intelligent code completion from within your IDE.

    Check out the type definitions in the latest KeyLines download, or take a look at our TypeScript documentation for more information.

    Enhancements

    • The KeyLines time bar now also features a removeItem() method, letting you completely remove items from the time bar.
    • Sequential now has a smaller spacing, making it more compact.
    • We've improved the way organic layout arranges multiple components when the packing option is set to 'rectangle'.
    • Even more of our demos have now been updated to modern JavaScript.

    Bug fixes

    • Fixed various issues with the KeyLines TypeScript definitions file.
    • Fixed an occasional error when using WebGL with very large datasets.
    • Fixed an issue where link ends might not be drawn at some zoom levels.
    • Validation of expand is now more robust, fixing an occasional issue for some label values.
    • Fixed an issue where transfer could result in combos being left in a broken state.
    • Fixed an issue where locking the chart could cause an infinite loop.

    5.5 Release Notes18 July 2019

    ENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES

    Labels along links

    Densely connected charts with lots of links can often feel crowded and cluttered. With the new inline link style option you can align labels along the direction of the link, making them look cleaner and fit better into the view.

    Take a look at our Style Links demo to find out more.

    chart illustrating inline link labels

    New: Integrate with Azure Cosmos

    Azure Cosmos logo

    KeyLines works seamlessly with all database technologies.

    To show this, we've added a new Azure Cosmos DB demo, so you can see just how simple it is to integrate with Microsoft's Azure Platform.

    To try out Azure Cosmos DB with KeyLines, check out the Integrate with Cosmos demo.

    New: Styling Charts demo

    It's often hard to decide what your chart should look and feel like. To give you some inspiration we've added a new demo showing just a few of the different themes that you can create with KeyLines.

    multiple screenshots from the updated Styling Charts demo

    To see the variety of views you can create with KeyLines, check out the Styling Charts Demo.

    Enhancements

    • Thanks to all your great feedback, gradients along links are now out of beta.
    • More of our demos have now been updated to modern JavaScript.
    • We've updated some of our Basics Documentation to help you get to grips with KeyLines.
    • Link flow is now stable and ready for production.
    • Various improvements to the behaviour of layouts:
      • Higher values for the tightness property are now tighter on the standard layout.
      • Organic layout recentring has been improved.

    Known Issues

    Be aware that emojis on inline labels do not draw correctly to Canvas on Chrome in MacOS. This issue has been raised with and confirmed by Google, and we will provide an update when it is resolved.

    Bug fixes

    • Fixed an issue where long press touch events could lock chart items on some OS.
    • Fixed an issue where panning the chart background was prevented by watermark images.
    • Fixed an issue with invalid geo positions causing unexpected behaviour.
    • Multiple minor enhancements to data validation.
    • Fixed an issue where the consistent layout option could produce unexpected results.
    • Fixed an issue with absolute positions when running arrange.

    5.4 Release Notes5 June 2019

    NEW FEATURESENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES

    Smarter styling

    KeyLines 5.4 makes it easier for you to to modify your chart and reduce clutter, with new features like styling that adapts to the zoom level and animated flows on links.

    screenshot of chart with very large dataset

    Adaptive styling

    When viewing large, densely-connected graphs some items can start to dominate the visual aesthetics, while others are rendered almost invisible. This can make graphs unclear and harder to read. The new adaptive styling option allows KeyLines to dynamically enhance the chart's aesthetics, adjusting how nodes and links are drawn to suit the zoom level, and fading out labels.

    This gives large charts a much cleaner and clutter-free appearance when at low zoom levels.

    See how adaptive styling can help clean up clutter from a chart in our Visualising Big Data demo.

    Flow on Links

    Links with animated flow

    It's often difficult to convey traffic around networks. Now you can add an animated flow to links to show movement around your graph.

    The new flow functionality (currently in alpha) can be combined with all our other link styles to give you full control.

    Check out the Link Styles demo and our API reference for flow on links to learn more.

    Organic layout stable and ready for production

    We'd like to thank you for all your feedback, and are delighted to announce that the organic layout (now in beta) is now stable and ready for production. This means that the behaviour will be consistent in the future and you can use it in your shipped products.

    There are now more options to choose from too, including tightness, consistent and packing, allowing customisation just like our other layouts.

    Enhancements

    • KeyLines is now fully supported when used in a shadow DOM. This means that KeyLines is now more compatible with Web Components and related tools like Polymer.
    • There's a new Layout Basics page to help you discover the various options available with KeyLines.
    • Donuts in charts with dark backgrounds now have better fade in and out animations.
    • Many of our demos have been updated to more modern JavaScript syntax.

    Bug fixes

    • The Leaflet version is now only checked if you use KeyLines in map mode, rather than during KeyLines.create().
    • Fixed an issue with halos occasionally disappearing after combo operations.
    • Fixed an issue where exporting a hidden chart could result in a blank image.
    • Fixed an issue with the Vue component not correctly handling chart options.

    5.3 Release Notes16 April 2019

    NEW FEATURESENHANCEMENTSDEMO CHANGESDOC CHANGESBUG FIXES

    KeyLines streamlined

    We know that performance is always an important factor when you're building an app. To help you speed things up, we've made significant improvements to our WebGL rendering performance, with our benchmarks now delivering a 50% increase in frames per second compared to previous releases.

    We've also added new options for finer control over KeyLines elements' creation, modification and removal, giving you better control over resources and simplifying your code.

    chart generated from very large dataset

    Full lifecycle management

    In KeyLines 5.3 we've added a new way to create KeyLines elements by specifying their parent container. These elements are much more configurable in terms of their lifecycle; you can now call chart.destroy() or timebar.destroy() on an element to completely remove it from the page, freeing up any associated resources. This allows you to remove KeyLines assets quickly and cleanly from your app.

    Elements created using this method can now also be manipulated using the new chart.setContainer() and timebar.setContainer() APIs. You can use these to move charts and time bars around much more easily and even hide them from the page to be recalled later. This allows you to re-assign resources when, for example, switching between tabs in a single page application.

    Charts created this way also automatically resize to fit their parent containers, making things like fullscreen mode simpler and removing the need for complex custom code for resizing.

    For more information on resizing, see Resizing components.

    Vue tutorial

    As promised in the previous release, we have updated our Vue tutorial to align it with modern standards and practices. It now has all the great features, advice and helpful content of our Angular, React and plain JavaScript tutorials. The Vue component has also been revised to align with improvements to the Vue framework.

    Vue logo

    Enhancements

    Thanks to those of you who have tried out organic layout during its alpha release. We’ve listened to your feedback and have updated the layout to give it a tighter arrangement by default. There’s also a new tightness option to give you more control over node spacing.

    • Rendering performance is now 50% faster.
    • Lens layout is now better at handling mixtures of node sizes, as are combo arrangements.
    • New destroy() and setContainer() APIs for manipulating and destroying elements.
    • Updated the Vue component to be more robust and up-to-date.
    • Font icons can now be drawn in glyphs in bubbles.

    Deprecations

    We recommend using the new container approach to creating KeyLines elements, and have deprecated the old method (setSize() and using the 'element' property in KeyLines.create()). The new approach gives you automatic resizing and much greater control over resource management, but we’ll continue to support the older methods for backwards compatibility. For the full list, see Deprecations.

    Bug fixes

    • Fixed an issue with animateProperties sometimes not drawing halos.
    • Fixed an issue where the tweak layout wouldn’t always take node sizes into account.
    • Item positions remain fixed when opening or closing hidden combos.
    • Fixed an issue where charts were sometimes not created when using Vue routing.
    • Fixed an issue with watermarks sometimes not drawing correctly.
    • Fixed an issue where data could in some circumstances be mutated by merge and expand.
    • Fixed an issue where panning the chart could cause some links inside nested combos to briefly disappear.

    5.2 Release Notes27 February 2019

    ENHANCEMENTSBUG FIXESDOC CHANGES

    Combos out of beta

    image showing open and closed combos

    After releasing some big combos enhancements in 5.1, we are happy to announce that the combos feature is officially out of beta development and is now an established part of the KeyLines toolkit.

    In this release, we have also incorporated feedback from several customers to provide denser node arrangements inside combos, ensuring that open combos do not dominate too much of your chart real estate. Several other tweaks and fixes to outstanding combos issues are also included.

    If you haven’t checked out combos before, our Combos: Basic and Network Alerts demos are good places to start.

    New tutorials

    To help developers hit the ground running with KeyLines, we have rewritten our quick start guides for React, Angular and plain JavaScript. The new guides give a comprehensive overview of how to get your first KeyLines chart up and running with your favourite JavaScript framework. The guides also include a number of best practice recommendations for each framework, and we have updated our popular React and Angular components as well (See React and Angular components below for a full list of component changes).

    JavaScript logoAngular logoReact logo

    Check out the updated tutorials by clicking on the icons above (and don’t worry Vue fans, your updated guide is coming soon).

    Enhancements

    • We’ve improved the arrangement of structurally similar nodes in our structural layout to avoid overlapping labels.
    • Performance when selecting nodes or switching between dragging modes has been improved.

    React and Angular components

    As always our framework components are there for you to modify as you see fit, but to make them more useful and consistent we've given them an update. If you’re using our React or Angular components, we recommend you upgrade to the latest versions, but you’ll need to be aware of the following changes before you do so.

    If you’re using a modified version of the components we recommend you backup your files before merging the new versions into your code.

    • Changes to the React component:
      • The component now exports the KeyLines global.
      • The DOM element is now passed to ready() as well as chart.
      • Promise is now passed to KeyLines.promisify to make it compatible with Internet Explorer 11.
    • Changes to the Angular component:
      • You can now specify an id for the chart or time bar in the Angular component.

    Deprecations

    We've added some legacy API calls to our list of Deprecations.

    Bug fixes

    • Fixed several combos issues.
    • Small time bar values are no longer rounded to zero in the presence of much larger values.
    • Resolved unexpected behaviour with layouts being affected by enlargement on shape nodes.
    • Fixed an issue with emojis being distorted in some browsers.

    5.1 Release Notes9 January 2019

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Combo enhancements

    Combos are a great way to organise complex data in a concise way to reveal hidden patterns quickly and easily. We’ve had a huge amount of feedback since their original release and version 5.1 brings some major changes to the ways you can create and use combos. We've also made some big improvements to combo performance.

    social media demo

    Most significantly, from KeyLines 5.1 onwards you can define combos in your data when it is loaded into the chart. This means you can bring in data pre-combined, without having to load data first and then combine it afterwards. We accomplish this by allowing you to specify a ‘parent ID’ for any nodes you load or merge into the chart. As well as loading pre-combined datasets, this opens up a number of exciting use cases. For example, you can now populate the contents of combos on demand, by bringing in data from your backend and adding it to existing combos, or even promoting existing nodes in the chart into combos:

    lazy loading combos

    For more information, see the Combos documentation.

    Note: Charts created using the new parentId property which are then serialized cannot be loaded in versions of KeyLines older than 5.1.

    Default styles

    Combos have a complex hierarchical data structure. In previous versions, this made jobs like styling combo links harder than they needed to be. From 5.1 onwards you can specify default styles for combo links, avoiding the need for any complex code. You can also specify default styles for open combos and combo glyph counters. This, coupled with the fact that your combo structure can now be entirely driven by your data model, means that your combo code should be significantly simpler and easier to maintain.

    Enhancements

    • When using the new parentId method, you can now specify custom IDs for combos.
    • We've improved the performance of combos, particularly when creating combos and when using the transfer() function.
    • New demos: We've added two new demos to show off the combos functionality. Load Data into Combos provides a simple code example of merging data into combos from a backend using the parentId property. Social Media Analysis showcases the power of combos, allowing you to explore people's relationships based on their underlying social network activity.

    Discontinued support

    Following our announcement in May 2018 and the direction given by operating system providers, we've discontinued support of the following operating systems:

    • Apple: iOS 5, iOS 6, iOS 7, iOS 8, iOS 9, iOS 10
    • Apple: OS X Mountain Lion, OS X Mavericks, OS X Yosemite
    • Linux: Ubuntu 10.04 LTS, Ubuntu 12.04 LTS
    • Microsoft: Windows XP, Windows Vista, Windows 10.1507, Windows 10.1511 (does not affect later versions of Windows 10 - these are still supported)

    We will provide Extended Support for:

    • Microsoft: Windows 7 SP1
    • Microsoft: Windows 8.1

    Extended Support means we’ll keep testing and supporting these platforms unless withdrawal of Microsoft's Mainstream Support means we’re unable to do so.

    For a list of supported devices, operating systems and browsers, see Compatibility & Supported Platforms.

    Bug fixes

    • Fixed an issue where link labels could use the wrong font family in canvas mode
    • Fixed an issue with DOM resizing when transitioning to or from map mode
    • Fixed an issue with merge not respecting link offset inputs
    • Fixed an issue where pinch to zoom could cause the graph to move unexpectedly
    • For shape nodes, we've fixed issues where:
      • incorrect resizing occurred at different zoom levels
      • combo children were occasionally backgrounded
      • resizing with no colour or image could cause an exception to be thrown
    • Fixed an issue where the time bar fit had unexpected behaviour under some circumstances
    • HTML5 drag and drop correctly fires the hover event in map mode
    • Fixed an issue where in some circumstances images would flicker
    • Fixed an issue with drag events not publishing node ids

    5.0 Release Notes12 November 2018

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Next generation KeyLines Geospatial

    KeyLines 5.0 lets you map a connected world with better performance and more clarity and insight than ever before. We've completely overhauled our map mode, exposing new capabilities and improving the speed, smoothness and reliability of your geospatial views.

    image of chart using map modesecond image of chart using map mode

    Based on Leaflet 1.3.4, the new map mode features smoother panning and improved reliability across platforms and browsers, particularly on touch devices. We've also exposed more of the underlying Leaflet options, giving you the freedom to use layers and options such as alternative Coordinate Reference Systems (CRS).

    Mapping flexibility

    With KeyLines 5.0 you can use your own images instead of pointing to a map server. As well as giving you the flexibility to use offline images when you want to, this feature opens the door to a wide range of new and exciting possibilities. You can place nodes and links on any image backdrop - from floorplans and building layouts, to virtual representations of IT infrastructure.

    virtual representation of IT infrastructurerepresentation of IT infrastructure on floorplan

    The Leaflet upgrade also means you can integrate KeyLines with a far wider choice of map tile providers and plugins. We've created an integrate with Esri demo to show how you can use Esri's tiles and geospatial services in KeyLines.

    screenshot of integrating with Esri demo

    New: asynchronous image loading

    KeyLines 5.0 now loads its images asynchronously, so you don't need to keep your users waiting while large numbers of images are downloaded from backend servers. Images are loaded into the chart as soon as they're ready.

    Enhancements

    • KeyLines 5.0 features a new error event which fires when an error occurs inside the callback of another event.
    • KeyLines assets (navigation controls, cursor images, etc.) are now embedded directly into KeyLines, so you no longer need to reference the assets folder in your projects.
    • Map mode now uses the chart background colour or gradient instead of Leaflet's default colour.
    • We've improved the performance of setProperties() in some situations.

    Breaking API changes

    Like our previous annual major releases, Version 5.0 contains breaking changes. Without them, we couldn't evolve KeyLines and deliver the features you want.

    In particular, KeyLines 5.0 makes changes to the way images, including KeyLines assets such as our navigation controls, are loaded. We recommend reading 5.0 Breaking Changes carefully before you install this version.

    Deprecations

    We've added some legacy API calls to our list of Deprecations.

    Bug fixes

    • Fixed various issues that could occur when using toDataURL() in map mode.
    • Clicks on the chart background no longer raise a selectionchange event when the selection remains unchanged.
    • Fixed an issue which could cause an error when loading circularised images.
    • Fixed an issue where links with gradients could draw incorrectly if arrowheads are not present.
    • Fixed an issue which could cause errors when resizing the screen on downloaded framework demos (React, Angular, Vue).
    • Fixed an issue in the lens layout which could cause nodes to overlap.

    4.8 LTA Release Notes20 September 2018

    ENHANCEMENTSBUG FIXES

    New: more control over glyph positioning

    Glyphs on nodes can now be given a radius property to control their distance from the centre of their parent node. This gives you fine-grained control over the look and feel of your nodes, and opens up the possibility of creative node designs such as aligning glyphs with halos.

    image showing glyphs aligned with halos

    Take a look at our Style Nodes demo for an example of aligning glyphs with halos.

    New: KeyLines.info() API

    We've added a new API to help with troubleshooting and support. The KeyLines.info() function will return helpful information about your version and settings, and the environment KeyLines is running in. You can use it to diagnose issues when troubleshooting and when sending background information to [email protected].

    Bug fixes

    • Fixed an issue where link offsets could be drawn incorrectly in WebGL
    • Improved the drawing quality of links joining to large open combos
    • Improved robustness of some graph calculations, such as closeness, on very large datasets

    4.7 Release Notes30 August 2018

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Introducing the organic layout (Alpha)

    We're excited to present our new organic layout, designed to help untangle complex networks. By spreading the nodes and links apart in a distinctive fan-like pattern, the underlying structure becomes much clearer. It's also fast, offering significant performance improvements over the standard layout, particularly on large datasets.

    image of chart for very large network using the new organic layoutsecond image of chart for very large network using the new organic layout

    The layout arranges multiple components in a circular pattern with larger components in the centre. This gives a more natural, organic feel to your data.

    third image of chart for very large network using the new organic layout

    To see the new layout for yourself, have a look at our layouts and performance demos. For API Reference details, see chart.layout().

    This feature is currently in Alpha and there are some known issues. We'd love to hear what you think, so please send your feedback to us at [email protected].

    Time bar: mark times of interest

    The time bar histogram helps to explain how events and relationships evolve over time. We've added the ability to mark times or time ranges of interest in a different colour to make them stand out. It's an effective way to highlight unusual activity, such as IT network anomalies, or disputed transactions in this Credit Card Fraud demo.

    image of chart timebar histogram

    Font Awesome Version 5 support

    We've updated our demos to use the latest Font Awesome 5 icon set. It includes the ability to use font weights to specify different styles: solid, regular and light. For details on how to access the new styles with KeyLines and use different styles in the same chart, see the Font weights and Font Awesome 5 section of the Fonts and Font Icons page.

    image of nodes using font icons

    Bug fixes

    • Fixed an issue where wide glyphs would occasionally be aligned incorrectly.
    • Improved rendering when calling KeyLines.setSize() with non-integer values.
    • Fixed an issue where the font family attribute could be ignored when using multiple font families in WebGL.
    • Fixed an issue where the shortestPaths function did not always return all links between the same pairs of nodes.

    Organic layout (Alpha) - known issues

    • Since the organic layout tends to spread nodes apart to show structure, you may need to modify the zoom limits in KeyLines to fit everything in.
    • Currently, the organic layout doesn't take label size into account when positioning nodes, so labels may overlap.
    • Currently, the organic layout does not fire intermediate progress events during its calculation.
    • Currently, the organic layout doesn't have a tightness option like some other layouts.

    4.6 Release Notes26 July 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    New: Colour gradients on links (Beta)

    Customising links is a good way to make the connections in your data clearer and more meaningful. In this release we've introduced the ability to add colour gradients to links. As well as creating a striking visual effect, gradients are great for helping users understand flows between nodes, and for highlighting clusters of different types of node even at low zoom levels.

    screenshot of chart using maps and links with colour gradientsscreenshot of plain chart using links with colour gradients

    The transition between colours can be sharp instead of gradual. This example uses a two-tone effect to signify the health of an interface between two devices:

    simple chart showing link with a sharp colour transition rather than a smooth gradient

    For a first look at colour gradients in action, try the Style Links and Impact Analysis demos. For API Reference details, see the c2 link property and linkStyle chart option.

    More database demos updated with expand indicators

    In recent releases, we've added glyphs to expandable nodes in Integrate with Neo4j demos. It's an effective way to show which nodes have connections that can be brought into the chart dynamically from the back-end database.

    The feedback has been hugely positive, so we decided to enhance a further five database demos in the same way. See:

    • Integrate with DataStax
    • Integrate with JanusGraph
    • Integrate with Neptune
    • Integrate with OrientDB
    • Integrate with Titan

    Restyled KeyLines SDK site

    You'll notice that we've given this site a makeover.

    It's part of a wider project to improve the look and feel of all Cambridge Intelligence websites. There are further improvements planned, but we'd love to hear what you think about the changes so far. Contact [email protected].

    Enhancements

    • The KeyLines Angular component now supports Angular 6. See the Angular documentation and the Angular Integration: Time demo.
    • Drawing improvements: the size of borders on nodes is now more consistent at different zoom levels. In WebGL, the borders on bubbles and wide glyphs also appear much smoother.
    • Updated demo: we've added emoji examples to the Style Nodes demo.

    Bug fixes

    • In WebGL, we've fixed issues where:
      • borders on shape nodes could sometimes disappear at certain zoom levels.
      • the contents of shape nodes didn't fit inside their borders correctly.
    • Fixed an issue with the toDataURL gradient option which meant the background was missing from exported charts.

    4.5 Release Notes28 June 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    New: Integrate with Stardog

    Stardog logo

    We're always keen to demonstrate how easy it is to get KeyLines working with popular database technologies. Our latest demo shows how to integrate with Stardog - the enterprise knowledge graph platform.

    Stardog maps source data in its Resource Description Framework (RDF) database to a target of RDF 'triples' on the chart. KeyLines retrieves data using SPARQL queries that match specific triple patterns.

    The demo also features expand indicators to make clear which nodes have additional connections associated with them.

    Animated donuts

    Donuts are great for visualising numeric proportions of data. To draw attention to those donut segments, use animation. You can now use the animateProperties() function to animate the colour and value properties of donuts, allowing you to achieve eye-catching effects, such as mimicking a progress wheel.

    screenshot of animated donuts

    To find out more, see the animateProperties API Reference documentation.

    Full support for emojis in WebGL

    We now provide full support for emojis in KeyLines, removing the restriction that meant they were only available in Canvas mode. This includes support for combined emojis, such as family emojis, and the use of modifiers such as skin tone.

    screenshot of node labels using emoji

    Bug fixes

    • Fixed issue where you could only see data loaded in map mode once you'd interacted with the chart.
    • Fixed issue preventing you from disabling the time bar dblclick event.
    • Properties with names containing underscore characters are now correctly returned on 'd' objects by chart.each.

    4.4 Release Notes31 May 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Search for demos

    With more than 80 downloadable KeyLines demos to choose from, finding those that showcase the features you're interested in can take time. Not any more.

    We've added the ability to search demos, so it's now much easier to find and download the examples you want. The search 'fuzzy matches' words in demo titles, thumbnail descriptions and keywords.

    screen shot of demo search bar illustrating word matching

    If you'd prefer to browse through areas of interest, you can still use filters for the most popular demo categories - from styling and layouts to combos and time.

    Head to the Demos page to start searching.

    Drawing, layering and performance improvements

    In response to your feedback on the combos functionality released in KeyLines 4.0, we've improved the way items are drawn and layered. The key changes are:

    • the contents of open combos are now correctly obscured by any open combos drawn in front of them
    • links not contained within combos are now drawn behind open combos instead of in front of them
    • revealed links in combos and their connecting nodes are now drawn in front of any other items in the chart, including open combos
    • when any items including open combos are dragged, selected, transferred or resized, they're now drawn in front of most chart items so the focus is clear
    • halos and selection borders are now always drawn behind links so they don't obscure arrowheads

    To try out these changes, see the Combos demos.

    We're also happy to announce general improvements to rendering performance. To measure this, use the Test Performance demo.

    Support for future React changes

    React logo

    The React team intend to stop supporting problematic legacy component lifecyles in React 17.

    To get ready for this change, we've updated the KeyLines React component to stop using these methods. We've also upgraded the component to support React 16.3.

    To get started with KeyLines and React, see the React documentation and the React Integration and React Integration: Time demos.

    Enhancements

    We've renamed many of the demos to make sure the titles best represent the features they showcase. See the Demos page.

    Deprecations

    We intend to end support for a number of legacy operating systems from 1st January 2019. For more details, see Deprecations.

    Bug fixes

    • Fixed issue where self links disappeared from selected image nodes with borders and loose spacing set.
    • Fixed known issues affecting the way open combos are drawn and layered. For details, see Drawing and layering improvements.
    • Fixed WebGL rendering issue affecting arcs with large radiuses.

    4.3 Release Notes24 April 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Glyphs align with link direction

    Multiple glyphs on links are currently displayed in a row from left to right. Now you have the option for all glyphs in the chart to follow the direction of the link instead. This works well in charts containing crossed links. In this example, it's hard to see which glyphs belong to which link:

    glyphs on crossing links, all aligned horizontally

    The new option makes things much clearer:

    glyphs on crossing links, aligned with parent link

    To try the new alignment, use the linkStyle chart option, fully documented in the API Reference.

    Improved SVG support

    We're happy to announce full support for SVGs in Chrome, Firefox, Microsoft Edge and Safari. As long as SVG files have width and height attributes set and don't have foreign object tags, you can use them to enhance your charts just like any other image format.

    example set of SVG images

    For more details, see the updated Image Formats documentation.

    Neo4j demo updated with expand indicators

    The 'double-click/tap to explore' analyst workflow relies on the expand function to bring connections from back-end databases into the chart dynamically. But without clicking/tapping every node, users don't know which nodes are expandable and which aren't.

    By adding visual indicators to nodes, it's clear which ones have additional connections associated with them. We've used glyphs to enhance our popular Integrate with Neo4j demo to show you how this works.

    screenshot of updated Neo4j demo

    Enhancements

    • Users can now zoom out further, thanks to a change we've made to the chart's minimum zoom value. See minZoom API Reference documentation.
    • WebGL: the overview window is already available in demos rendered in Canvas. It's now supported in WebGL too.
    • New demo: Links shows how to group multiple links between two nodes into a single link for each direction, or into a single bidirectional link.
    • Updated demo: we've made significant improvements to the styling and usability of the Ransomware Attacks demo.

    Bug fixes

    • Fixed issue to make sure KeyLines fully supports Font Awesome 5.
    • Fixed issue that displayed underlined characters when using WebGL and Firefox.
    • Fixed WebGL drawing issue affecting charts displayed inside a hidden element.
    • Fixed issue where zooming to fit the time bar would throw an error when using old dates.

    4.2 Release Notes22 March 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Support for time periods

    The time bar already shows events that occur at a particular instant in time. Now it also shows events that represent a period of time. Exploring how and when connections between nodes start, evolve and end makes it easier to spot trends and identify unusual patterns.

    You can try this latest time bar feature for yourself with our new Time Periods demo:

    image showing how to use a timebar to see how a chart updates over time

    The demo cycles through the changing relationships between entrepreneurs and the companies they’re directors of. You’ll see that time periods don’t need a fixed start and end time: you can choose one or the other or both. In this way, you can support open-ended events.

    You’ll find the new TimePeriod object type fully documented in the API Reference.

    New: Integrate with Amazon Neptune demo

    AWS logo

    When Amazon announced the preview of their purpose-built, high-performance Neptune graph database, we were keen to show you how it works with KeyLines.

    The new Integrate with Neptune demo supports the Apache TinkerPop3 property graph model queried with Gremlin. The demo also shows how to map visual information to items in the graph database.

    Enhancements

    • WebGL: we've improved how curved lines are rendered - they're now much smoother at all sizes. If you try the Filter Mapping Data by Time demo, you'll also notice a significant improvement to animation performance.
    • Documentation improvement: we’ve rewritten the Time Bar page to help you get started with the time bar more quickly, or make the most of your existing implementation.
    • We're happy to announce details of our KeyLines consulting and training services. For more information, see Support.

    Bug fixes

    • Fixed WebGL issues that meant KeyLines didn't run validity checks after images were fetched using CORS, and didn't fall back to Canvas if a virtual machine was detected.
    • Fixed an issue where halos didn't work correctly on selectedNode and selectedLink.

    4.1 Release Notes26 February 2018

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Greater flexibility with glyphs

    Glyphs are a great way to enhance nodes and links with additional key attributes. You can now add as many glyphs to a node as you like. Using either compass points or integers, you can also position them exactly where you want.

    nodes with multiple glyphs

    To learn more, see the Style Nodes demo and Glyphs API Reference documentation.

    Enhancements

    • The KeyLines Angular component now supports Angular 5. We've updated the examples in the Angular documentation and the Angular Integration: Time demo.
    • The KeyLines React component now supports React 16.2 and uses promises. We've updated the examples in the React documentation and the React Integration and React Integration: Time demos.
    • The KeyLines AngularJS directive now uses promises. We've updated the examples in the AngularJS Directive 1.x documentation and the AngularJS Integration and AngularJS Integration: Time demos.
    • Pings no longer take up halo properties (ha0-9), so you now have greater flexibility when using halos and pings together. See chart.ping() API Reference documentation.
    • We've made performance improvements to the way KeyLines handles connected components. You'll see faster layout times for charts containing large numbers of separate connected components.
    • New demo: Use Keyboard Shortcuts shows how you can use KeyLines and HTML events to control KeyLines with keyboard shortcuts.
    • Updated demo: Donuts and Email Traffic now includes examples of binding to hover and touchdown events to show legends and colour highlighting on donut segments.
    • halos showing extra info when used with hover

    • Updated demo: we've made significant improvements to the styling and usability of the Impact Analysis demo.
    • Documentation improvements: we've documented the key concepts behind the combos feature released in KeyLines 4.0. See Combos Concepts. We've also updated the existing Combos documentation with details of how to find items.

    Bug fixes

    • Fixed an issue where using chart.graph() centrality functions with combos would return items at the underlying level.
    • Fixed an issue where running chart.graph().eigenCentrality(), chart.graph().pageRank() or chart.graph().clusters() without an options object would throw an error.
    • Fixed an issue which prevented the re-playing of a time bar animation after a previous animation had finished.
    • Fixed several WebGL issues to improve the quality of SVG rendering, scrolling performance, line antialiasing and arrowhead sizing.
    • Fixed an issue where serializing a chart could record an intermediate ping state.

    4.0 Release Notes15 January 2018

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Enhanced Combos: more insight than ever before

    We're delighted to bring you KeyLines 4.0. Featuring groundbreaking new combos functionality, this version lets you minimise chart clutter while providing users with unprecedented insight into complex networks.

    image showing chart using combos

    Use the brand new combos functionality to create visual groupings for nodes. They can be styled, moved around, opened and closed, and nested together to suit even the most complex and demanding networks. The result provides an innovative way to explore connected data. Users can navigate clearer charts and expose detail on demand at their own pace.

    For a detailed overview, see the Combos documentation.

    New and updated demos: Combos

    We've designed a set of demos to help you get started with the new combos feature:

    • Combos: Basic (Updated) - shows open and closed combos, and lets you create nested combos.
    • Combos: Advanced (Updated) - shows how to drill down into a complex network and reveal connections.
    • Combo Dragging (New) - shows the easiest ways to transfer and arrange nodes and combos.
    • Combos: Find Paths (New) - shows how to use graph functions in conjunction with combos.
    • Combos: Reveal Links (New) - shows how to expose and examine the links between nodes in different combos.
    • image showing chart using combos with revealed links

    • Network Alerts (New) - shows how to use combos to drill down into layers of IT network topology.

    chart that uses combos so users can drill down into detail

    Enhancements

    • We've improved the way standard and structural layouts handle large nodes, and how lens layout deals with thinly dispersed nodes.
    • To stop selected nodes being obscured by other items, they are now always drawn on top of unselected nodes.
    • chart.each has a new 'items' option that lets you set which items to iterate over when you use combos.
    • chart.getItem now returns items inside combos.
    • The chart.hide, chart.show and chart.removeItem functions now apply to items inside combos.
    • If you call chart.ping on a node that's inside a closed combo, KeyLines will ping the first visible parent combo.
    • If you use chart.ping to animate a node or link, the animated effect now appears in front of any shapes on the chart.
    • The default hover chart option was too slow, so we've changed it from 1000 to 150 milliseconds.

    Donuts feature moves out of Beta

    We're happy to announce that the donuts feature is out of Beta development and is now an established part of the KeyLines toolkit.

    End of support for IE9 and IE10

    Microsoft stopped supporting these older versions back in January 2016.In KeyLines 3.5, we announced our intention to follow their direction. KeyLines support for IE9 and IE10 has now ended.

    Breaking API changes

    See 4.0 Breaking Changes

    Deprecations

    See Deprecations

    Bug fixes

    • Fixed small memory leak associated with lens layout.
    • Fixed an issue with chart.clear() that could cause rendering issues in WebGL.
    • Fixed Object prototype issues that caused console errors.
    • Removed map mode's default 5ms hover value.

    Known issue

    We're aware of an issue with the way open combos behave when they overlap. Currently, the combo drawn on top does not obscure the items inside the combo behind it.

    3.8 Release Notes21 November 2017

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    New sequential layout

    The highlight of this release is our new sequential layout. It's designed to display data that contains a clear sequence of distinct levels of nodes. It's ideally suited to represent tiered datasets such as IT infrastructure, or flow sequences such as blockchains.

    For more details, see the Sequential Layouts demo and chart.layout() API documentation.

    Enhancements

    • New demo Integrate with JanusGraph shows how to use KeyLines with this scalable graph database forked from TitanDB.
    • Improved styling in Databases demos to give the movie data a more modern look and feel.
    • Documentation improvements: it's now much easier to find details of Breaking Changes and Deprecations. We've also published the KeyLines Deprecation Process.

    Bug fixes

    • Fixed issue with mounting/remounting the Vue component.
    • Links are no longer drawn to the tip of the arrowhead so they are not visible behind transparent arrowheads.
    • chart.labelPosition now returns correct font size.

    3.7 Release Notes23 October 2017

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Enhancements

    Bug fixes

    • Can now pass a DOM element when using AngularJS
    • chart.expand() now handles hidden nodes correctly

    3.6 Release Notes12 September 2017

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    Enhancements

    • New Vue component and integration demos
    • Added ability to pass an array of ids into chart.zoom options
    • Added time bar maxRange option so you can set a zoom out limit
    • Included webpack.config and package.json files in framework demos (not for AngularJS)
    • New demos: Style Links and Style Nodes

    Bug fixes

    • Multi-selected links now drag correctly
    • Fixed stack overflow error when running layouts on 1000s of single node components
    • Fixed chart.animateProperties issues affecting how nodes are drawn and properties set
    • Made animation smoother for nodes with borders in WebGL
    • Expanded links are no longer hidden when you switch from map mode to network mode
    • Fixed issue where a nested combo's hide or foreground status didn't match that of its parent

    3.5.5 Release Notes1 August 2017

    ENHANCEMENTSBUG FIXES

    Enhancements

    • Added two new link arrowhead size options: 'large' and 'xlarge'
    • Added the ability to pass a DOM element instead of an id to KeyLines.create

    Bug fixes

    • Updated KeyLines TypeScript definition file so you can pass chart.serialize to timebar.load()
    • WebGL now handles overlapping nodes correctly
    • Fixed issue with creating a link from a combo
    • Fixed issue so radial layout 'top' option supports node ids with multiple characters

    3.5 Release Notes4 July 2017

    ENHANCEMENTSBUG FIXESDEMO CHANGES

    The fastest KeyLines yet

    Now rendering twice as fast as the previous release, KeyLines 3.5 is all about performance.

    We've made improvements across the board to give your end users a lightning-fast user experience, even with large numbers of nodes.

    We've also revised our API Reference page so developers can find what they need more quickly and easily. There are new demos and sample code to help you make fast progress. We show you how to combine nodes on maps to reduce clutter, and integrate with ArangoDB.

    Performance improvements

    Benchmarking KeyLines performance is important to us, and we take care to make sure our charts deliver a great user experience. One important benchmark is how many frames per second KeyLines can deliver when animating large numbers of nodes and links. These large-scale animations stress the system, and a good frame rate tells us that end users will get a smooth, enjoyable chart experience.

    In our test environment, KeyLines 3.5 delivers more than twice the frame rate of previous versions when animating a densely-connected network of thousands of nodes. This means you can work with bigger and more complex datasets without worrying about the impact on performance.

    Other improvements to performance in this release:

    • WebGL is now the default rendering mode, so users will see KeyLines at its best. If WebGL is not available in the user's browser, KeyLines will fall back to Canvas mode.
    • We've improved performance of combos, particularly when identifying parent combos of an item.

    See improved rendering performance in the Test Performance demo.

    Redesigned API Reference documentation

    We've redesigned the API Reference to make it easier to use. You can now:

    • Filter items in the navigation pane to find what you're looking for more quickly.
    • See chart, map and time bar options in separate sections without having to hunt through functions to find them.
    • Use our new, clearer layout to pick out key information for items more easily.
    • Follow links to demos that showcase how to use specific functions and events.

    If you have any feedback on these changes, or suggestions for improvements, we're keen to hear from you. Send feedback

    New demo: Combos on Maps

    Users often want to remove clutter from maps, particularly when zoomed out. The KeyLines Combo feature is great for this. In the new Combos on Maps demo, we show you how to use combos to group items that are in close proximity, and dynamically change the groupings as the user zooms in or out.

    image of combos on maps

    New demo: Integrating with ArangoDB

    We’ve added an Integrate with ArangoDB demo that shows how to get ArangoDB databases working with KeyLines. ArangoDB's Foxx microservice framework lets you create V8 JavaScript microservices that run directly within the database, so you can serve up data in exactly the form KeyLines needs.

    Features move out of Beta

    We're happy to announce that a number of features are out of Beta development. These are now established features of the KeyLines toolkit:

    The extend option for the time bar play function is out of Alpha and is now an established feature too.

    Advanced notice: end of support for IE9 and 10

    This KeyLines release will be the last to support Internet Explorer 9 and 10.

    We're following Microsoft's direction after they stopped support for these older versions back in January 2016.

    Breaking API changes

    See 3.5 Breaking Changes

    Bug fixes and enhancements

    • TypeScript timebar.range() return is now correctly defined.
    • Fixed an issue that could cause an exception when creating large numbers of combos.
    • Fixed WebGL varyings issue.
    • TypeScript now builds without errors in Angular demos.
    • toDataURL images now include background colour.
    • Fixed an issue where the hierarchy 'level' option could generate an exception with large datasets.

    3.4 Release Notes29 March 2017

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Introducing donuts

    Graphs are great for getting a sense of network structure at a glance, but sometimes you need to convey data values quickly too. To help, we've created a new donuts feature. Donuts display relative data values as node borders, so charts are enriched with information without becoming too complicated. More details

    The rest of this release is about improving the developer experience. If you're new to the SDK, our updated Quick Start guide means you can get KeyLines working and start visualizing data in minutes. New support for TypeScript also lets you take advantage of the time-saving features it offers while you're writing code for KeyLines.

    Together with support for Angular and new demos, we hope you'll think that our development effort has been time well spent.

    New: Donuts (Beta)

    Sometimes you want to show node values as numeric proportions. For example, you might want to know the relative proportions of certain kinds of network traffic handled by a router. Or, if you're investigating fraudulent reviews of shopping experiences, you want to show the ratio of positive reviews a person writes compared with negative ones. It’s hard to represent these clearly with labels or glyphs, so we’ve developed donuts.

    Donuts are circular node borders divided into segments that add up to 360 degrees. They work just like pie charts.

    donuts in fraud chartsimple donutdonuts in email connectivity chart

    Donuts are entirely customisable - you can select how many segments you want, choose colour palettes, set segment and border widths, add tooltips and more.

    We’ve created demos to help you get started with donuts. See:

    New: Support for TypeScript (Alpha)

    We know many of you use TypeScript code, so we've added support for this. It means you can take advantage of key features including strong typing, context docs and IntelliSense.

    image of typescript

    TypeScript supports type annotations that let you record contracts of functions and variables in a lightweight way. You can use existing JavaScript code, other JavaScript libraries, and call TypeScript code from JavaScript.

    KeyLines comes with detailed type definitions that you can include in your TypeScript project which makes coding in TypeScript much easier. For more information, see TypeScript (Alpha).

    New: Support for Angular

    We're pleased to announce support for the latest Angular platform with our Angular component.

    Angular is the official name of the latest web application platform from the team that built AngularJS 1.x. The two platforms are not the same - Angular is a complete rewrite of AngularJS.

    We've also created a new demo to help get you up to speed with Angular. See:

    We still support AngularJS 1.x with our AngularJS directive, in fact we've improved the current documentation and demos. See:

    • AngularJS 1.x
    • AngularJS Integration
    • ngularJS Integration: Time

    Updated Quick Start guide and other doc improvements

    We want to make the KeyLines evaluation experience as simple as possible. This includes making sure new users can get up and running quickly and easily, which is why we've rewritten our Quick Start guide.

    We've made other documentation improvements by adding guidelines on:

    Demo changes

    New

    Updated

    • Test Performance - there's now an option to show/hide labels
    • AngularJS Integration - improved demo description
    • AngularJS Integration: Time - improved demo description
    • React Integration - improved demo description
    • React Integration: Time - improved demo description
    • Integrate with Neo4j - updated to use Neo4j 3.1.1
    • Neo4j Integration: Time - updated to use Neo4j 3.1.1
    • Layouts - runs fit and tightness separately to show the effects more clearly

    API changes

    Bug fixes and enhancements

    • Fixed WebGL flattened font icon issue
    • RTL text in WebGL supports newline characters
    • Characters displayed correctly when nodes are moved using the keyboard in WebGL
    • Added blacklist support of Google SwiftShader rendering to WebGL
    • Map-Based Networks demo no longer crashes in Firefox
    • Maps dragged out of bounds bounce back correctly
    • Map touch functions work on Windows touch devices in Chrome
    • Fixed unexpected grey background during transition to map mode
    • Touch functions on Windows touch devices in Chrome no longer throw MSGesture errors
    • KeyLines now supplies subwidget ids for glyphs displayed in a row
    • Double-clicking on right mouse button no longer zooms in on Firefox
    • Layouts no longer straighten self links
    • Standard layout now fixes two-node components properly

    3.3 Release Notes15 December 2016

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Self-Linking Nodes

    We’ve responded to user requests and developed a new Beta feature: self-linking nodes. More details

    We’re also happy to announce that our high-performing WebGL rendering engine is out of Beta and is now an established feature of KeyLines. More details

    You'll notice that we've revamped the Demo page to make navigation easier. Amongst the new demos we've added, there's one showing you how to use a REST API to integrate with Elasticsearch.

    We've made improvements to existing established features too, including clusters, font icons and the time bar. More details

    If you're analysing an IT network or cyber threat, it's not unusual to find nodes that send network traffic to themselves. For example, an email may be copied to a sender's address. But how do you represent this behaviour on a chart? The answer is by using self-linking nodes. These are nodes with outgoing single or multiple links that loop back to themselves.

    image of self link

    There’s also a demo to showcase self-linking nodes. See the Nodes with Self Links demo.

    WebGL improvements (out of Beta)

    WebGL is no longer in Beta and is now an established feature of KeyLines. Since the last release we’ve made the following key changes:

    • Added support for right-to-left (RTL) writing systems such as Arabic and Hebrew. We’ve also added a demo to show how this works. See the Multiple Languages demo.
    • Improved curved lines. Arcs in WebGL are made up of a fixed number of segments. Previously, these could look jagged when you zoomed in, but they’re now much smoother.
    • General improvements to stability and performance.

    New: Elasticsearch DemoElasticsearch logo

    We’ve added a new Integrate with Elasticsearch demo that shows how to get Elasticsearch data working with KeyLines.

    You can use REST queries to retrieve data and let users explore complex networks in large databases. The demo also shows how to map visual information to the items in the graph database. To get started, view the source code and then download it.

    For more information, see our web article Visualizing the Elasticsearch Graph API with KeyLines

    Font Icon position improvements (out of Beta)

    We’ve improved the way selected font icons are displayed. When you select a regular icon, KeyLines adjusts the width and height so it fits inside the selection boundary. The same now applies to font icons, so font characters can no longer overlap the boundary.

    If icons still aren’t positioned exactly as you’d like, use the new imageAlignment chart option to make further tweaks.

    Lens Layout includes the tightness option (out of Beta)

    By default, the tightness option now applies to the Lens Layout. Previously, applying the layout would give you a fish eye view of the chart, and some nodes would be spread far apart across the chart. The Chart layout tightness option automatically positions the nodes closer together.

    To try out Lens Layout tightness for yourself, see the Layouts demo.

    React component rewritten

    Many React users prefer ES6/JSX, so we’ve rewritten the React component to support ES6 classes.

    We’ve also updated the React component to support the time bar. There's a new React demo to show how you can filter chart items by time. See React Integration: Time

    The react-keylines.js file in the demo source code also contains an example of how to use ES6 class syntax.

    New: Support for Promises ES6 (Beta)

    To comply with the ES6 version of JavaScript, we’ve added a KeyLines.promisify() function that lets you use promises instead of callbacks. A promise represents the result of an async function before that result is known.

    There’s also a demo that shows how you can organise your code to support promises. See Promises.

    Cluster discovery is now deterministic

    You can now choose whether you want your results to be the same or different every time you run a cluster. To do this, in the Graph clusters function, use the consistent option.

    Time bar improvements

    Choose a time bar font

    You can now use a fontFamily option to specify which font to use in the time bar, just as you can already for main chart objects.

    Set the time bar font size

    If you change the height of your time bar, it makes sense to change the relative size of the time bar font too. We’ve added a fontSize option that lets you do this.

    Support for multiple font icon families

    You can now use the 'ff' option on nodes to include icons from different font families on the same chart. The 'iconFontFamily' chart option sets the global family. The 'ff' node option lets you overwrite this and use a different font family for a specific icon. It works the same way as the existing 'ff' font option.

    It can take a long time to load Font Icons from multiple Font Families. To improve performance, we recommend that you create a single, custom Font Family containing the icons you want to use. See What's the best way to load Multiple Font Icons?

    Control alignment of font icons and images

    Font icons and images are not always positioned accurately inside nodes and glyphs. You can now adjust their position and scale using the new chart ‘imageAlignment’ option. We’ve also added a demo to showcase how it works. See Align Images.

    Demo page improvements

    We've added filters, so it's easier to find the demos you’re interested in.

    • If you're evaluating KeyLines, start with the featured demos, case studies and fundamentals.
    • If you're an existing user, see What's New?, or find demos that show the features or types of analysis you’re interested in.
    • We've also made the demo names and descriptions clearer, so you can identify at first glance which demos showcase the features you want to include in your application.

    Demo changes

    New

    Updated

    • Animate Items - now demonstrates how font icons can be animated too
    • Integrate with Titan - supports Titan 1.x and TinkerPop 3.x
    • React Integration - supports ES6
    • Font Icons - supports the imageAlignment function
    • Clusters - supports the tightness function
    • Customise the Time Bar - lets you change the time bar font family and size

    Breaking API changes

    See 3.3 Breaking Changes

    API changes

    Bug fixes and enhancements

    • WebGL text rendering bug fixed by the Firefox team in Firefox 49.0.2.
    • Links rendered correctly using WebGL in Chrome with Radeon 370m Graphics Card.
    • Fixed misleading time bar decade labelling.
    • The WebGL switch works correctly in demos.
    • Combos no longer inherit their visible status from the first node.
    • Fixed issue where histogram bars extended past the time bar range.
    • CreateLink callback now returns null if the link isn't created
    • Nodes in the Neo4j demo no longer move to the other side of the chart.
    • KeyLines downloads won’t serve expired keylines.js.
    • Layouts in the Titan demo work correctly.
    • Right hand demo panel is no longer broken in Chrome 55.

    3.2 Release Notes15 September 2016

    NEW FEATURESDEPRECATIONSENHANCEMENTSBUG FIXESDEMO CHANGES

    Better ways to work with large datasets

    In this release, we’ve made working with larger datasets quicker and easier. You’ll see improvements to the way filtering, expanding and layouts work, and for the first time be able to run graph calculations without visualisations. We’ve also added a demo on how to integrate with vast datasets in DataStax Enterprise Graph, and upgraded WebGL from Alpha to Beta status.

    Highlights include:

    • Better filtering
    • Greater flexibility and control over layouts
    • Flexible graph functions without graph rendering
    • New time bar option to limit zoom level
    • Beta version of WebGL
    • New DataStax Integration Demo
    • Withdrawal of support for Flash
    • Demo changes
    • API changes
    • Bug fixes and enhancements

    Better filtering

    We’ve made it much easier to use combos with filters. You can use the new filter option to apply filters to items inside combos. If every item in a combo is filtered out, that combo won’t be displayed. This means you’re only ever looking at the items and combos you’re interested in. It saves you having to write custom combo filter code to handle this.

    To improve filtering further, we’ve added a filter condition to the expand function. When you expand an item, your existing filters are applied to the new nodes and links added to the chart.

    Greater flexibility and control over layouts

    If you’re analysing a chart with lots of items, you don’t want node positions to shift unexpectedly when you change layout or add items. We’ve added an option to retain the position of existing nodes whenever you:

    • re-apply a standard, structural or lens layout
    • expand an item to add new data to the chart

    We’ve improved the default hierarchy layout. Higher-level node structures are now stretched, fully exposed and much easier to read. This is useful when you’re analysing large, flat hierarchical data that can produce long, narrow charts with links and structures that are difficult to see. To revert from the default layout to the previous style, use the flatten option.

    image of hierarchy layout

    Previously, the expand function displayed new items on the chart using the standard layout. This wasn’t ideal if the rest of your chart used a different layout.

    We’ve updated this function so you can choose a layout style to match the rest of your chart: standard, hierarchy, radial or tweak.

    Want to see how it works? Try the new Incremental Layout Demo

    Flexible graph functions without graph rendering (Beta)

    In previous releases, KeyLines had to render a graph before you could start analysing the data. This was okay for small datasets, but not for larger ones that took much longer to render.

    We’ve fixed this in 3.2 by creating a separate Graph Engine to perform analysis. You can now run graph calculations on larger datasets without having to wait for charts to display fully. You can also:

    • run the Graph Engine on a different server using Node.js
    • filter the dataset to display only the items you need to analyse

    For more information, see the Graph Engine Documentation

    The Graph Engine is in Beta development. Your feedback will help shape the future of this feature, so we’d love to hear your thoughts. Email [email protected]

    DataStax Integration Demo

    We’ve added a new DataStax Integration Demo to show you how to get DataStax Enterprise (DSE) Graph databases working with KeyLines. You can use Gremlin queries to retrieve data, letting users explore highly complex relationships in vast datasets. The demo also shows how to map visual information to the items in the graph database. To get started, view the source code and then download it.

    For more information, see our web article Visualising the DataStax Enterprise Graph

    New time bar option to limit zoom level

    The time bar lets users zoom into an ever decreasing date and time interval. However, if your time data is constrained to a particular minimum level such as a day, zooming beyond that level may not be useful. A new time bar option, minScale, lets users limit their zoom level.

    Note: minScale replaces the minRange option, which has been deprecated. You can still use minRange, but we recommend using minScale instead.

    WebGL moves to Beta

    Thanks to your feedback we’ve continued to make significant improvements to WebGL. We’re happy to announce that it’s now moved to Beta. In this release we’ve focused on rendering quality to make sure there’s better consistency with the charts rendered in Canvas. Key improvements include:

    • the appearance of dotted and dashed lines
    • the clarity of text and images so they’re sharp at any zoom level

    For more information, see the WebGL Documentation

    Removed Flash support

    Earlier this year we announced plans to end Flash support, and we’ve removed it from this release. If you need to continue supporting Flash, email [email protected]

    Demo changes

    API changes

    • Expand has two additional options, layout and filter:
      • layout specifies the layout of newly returned items
      • filter applies filtering constraints to newly returned items
    • Layout has new consistent and flatten options:
      • consistent retains node positions between similar layouts
      • flatten controls how hierarchy layouts are displayed
    • The new minScale time bar option lets you limit the zoom level
    • Filters have new combo and updateGlyph options:
      • combos are used to filter the contents of the combo
      • updateGlyph updates the text of the combo’s glyph to show the number of visible items inside the combo node
    • You can use the Graph Engine and the visual KeyLines chart separately (getGraphEngine, graph.clear & graph.load)

    Deprecations

    • The minRange Time bar option has been deprecated. We recommend using minScale instead.

    Bug fixes and enhancements

    • Background correctly displays RTL text (Canvas)
    • Better exception text when setting an invalid link
    • Standard layout now restores large charts successfully after radial layout
    • Able to navigate and pan the dependencies demo
    • Sliders on the time bar are easier to use on touch devices
    • Can drag the time bar by the major and minor scales
    • Improved appearance of WebGL text, icons and nodes
    • Better exception text for WebGL when the number of unique text characters are exceeded
    • Combo link remains deleted
    • Combo in map mode applies the 'e' style object properly
    • Tweak layout now works correctly when nodes are stacked and have the 'e' size set

    3.1 Release Notes28 June 2016

    NEW FEATURESENHANCEMENTSBUG FIXESDEMO CHANGES

    Greater Control and React

    Introducing KeyLines 3.1 – built to give you greater control, more flexibility and a faster developer experience.

    Highlights include:

    • An improved hierarchy layout
    • New glyph resizing controls
    • Auto-ellipsis of long labels
    • High-definition assets for your charts
    • Integration with React.

    As always, we would love your input for our future releases. Make your voice heard! Send thoughts and suggestions to [email protected].

    Adding controls to the hierarchy layout

    Many datasets include some kind of hierarchy or dependency. In this release, we have added the ability to override the automatic layout so you can place a node in a specific vertical layer. This means you can force nodes with shared attributes into layers, flowing from top to bottom to give a clearer presentation:

    hierarchy layout with levels

    See our new Hierarchies demo for more details.

    Display enhancements

    Other enhancements in this release are designed to help you build clearer, easier to use applications:

    • Labels: A new ‘text centre’ option allows you to override the automatic positioning of labels below nodes.
    • Glyphs: KeyLines’ glyph sizes are now configurable – so the most important ones can be appropriately sized.
    • Auto-ellipsis: We’ve made it simpler for you to automatically truncate long labels in a clean and predictable way.

    Important: Changes to font loading

    This release contains some significant changes to the way KeyLines deals with loading fonts.

    If you use Font Icons in a production environment you will need to make some changes to your code before deploying this version of KeyLines.

    For reasons of performance, simplicity and compatibility KeyLines now defers to an external font loader if required. Full information on the changes and a migration guide is available here.

    Contact us if you need more information or clarification.

    Get started faster with React

    React logo

    We are delighted to announce our new documentation to help you integrate KeyLines into your React app. A new demo and helpful notes will get you started.

    Our React integration is currently in Alpha release. This means we need your feedback before we recommend using it in production. Send our support team your thoughts.

    Note: KeyLines is compatible with most JavaScript frameworks, so you’re welcome to use whichever you prefer. We don’t prescribe or prefer any of them! If there’s an integration you would like to see us work on next, just let us know.

    An update on WebGL

    Thank you for all of your comments and suggestions on our new WebGL functionality. To respond to all of your feedback, we are going to keep it in Alpha stage for a little longer – so we recommend you do not use it in production environments yet.

    We will update you when WebGL moves into Beta stage.

    Other Enhancements

    image of clearer navigation controls

    Retina-ready resources

    More and more of your users are adopting 4k monitors and retina screens. To give them the best experience possible, we have released our fixed assets in beautiful better-than-HD resolution.

    New Combos demo

    You asked us for more demos to help you make better use of Combos. So our new Ransomware demo lets you explore the spread of ransomware over time and regions, showing how to use KeyLines combos with the time bar component.

    image of ransomeware demo

    New license mechanisms

    This release includes some changes ‘under the hood’ that will mean our Proof of Concept customers no longer need to replace their KeyLines files each month. This will reduce interruption to your projects and maintenance overhead.

    End of Flash Support

    We contacted all customers some time ago to warn you of our plans to end support for our Flash component. This release will be the last to support Flash.

    By dropping Flash, we will be able to dedicate more time to better and more modern technologies that your users prefer – including WebGL.

    We do have a long-term support option in place for any customers who need to continue supporting Flash, but you must let us know. Contact our support team with your requirements.

    Breaking API changes

    See 3.1 Breaking Changes

    API changes

    • The 'tc' property (text centre) now applies to all nodes, not just shapes
    • Glyphs have a new 'e' property specifying their enlargement
    • chart.expand has a new 'straighten' option to control whether it straightens links
    • The hierarchy and radial layouts now have a 'level' option to control which level nodes are placed in
    • chart.options has a new 'truncateLabels' setting that controls how item labels are truncated

    Bug fixes and improvements

    • Fixed the type parameter of the time bar 'play' event, which was sometimes incorrect
    • Corrected the triggering of time bar start events when dragging the sliders
    • Stopped Chrome v50 and later generating lots of WebGL warning messages on the developer console
    • Fixed an error dragging the time bar sliders with no data loaded
    • Made KeyLines map mode respect disabling of double-click zoom on the Leaflet map control
    • Fixed a problem which stopped chart.merge adjusting link offsets correctly
    • Fixed the extents used by toDataURL when the 'fit' option was 'oneToOne'
    • Eliminated a ten-second delay in loading the chart with certain font settings
    • Corrected the display of text labels in canvas elements with dir="rtl" in Internet Explorer
    • Hovering over a previously-hovered item after clicking the chart background now triggers a new hover event
    • Improved the way font icons are drawn to reduce overlap with selection indicators
    • Improved how the hierarchy layout handles long node labels with the 'right' and 'left' orientations

    3.0 Release Notes23 March 2016

    NEW FEATURESENHANCEMENTSBUG FIXESAPI CHANGESDEMO CHANGES

    Supercharge your charts with WebGL

    Performance boosted to meet cyber-data challenges

    Significant optimizations increase rendering performance by up to 10 times; selected graph functions by up to 50 times. New demos illustrate support for fast-growing Cyber security markets.

    image of big networkimage of big networkimage of big network

    Panning with 10k elements: 10x improvement in FPS

    Drawing: 5x improvement in rendering speed

    Repeated neighbours calls: 50x improvement

    This release gives access to the power of WebGL, allowing analysts to manipulate bigger graphs more easily. All users will appreciate greater smoothness and fluidity when panning and zooming.

    To reinforce our support for ‘Cyber’ we’ve included three compelling new demos showing the insight that KeyLines can provide. Complex data-breach, malware propagation and vulnerability-exploit data are all shown to quickly reveal underlying patterns and trends that can inform proactive behaviour.

    image of malware tracking demoimage of vulnerability exploits analysis demoimage of data breach tracking demo

    Malware Tracker

    Exploit Kits

    Data Breaches

    There are brand-new Fraud demos to show the power of KeyLines in exposing suspicious transactions, and, for developers, there’s a great new demo showing integration with the popular Neo4j database. Here the graph is combined with the power of KeyLines’ time bar to dynamically pull more data from Neo as the user explores the data. And, as usual, you can download all the assets behind all the demos with one click to get more productive, more quickly.

    image of Neo4J demoimage of Angular logoimage of credit card fraud analysis demo

    Neo4J with Time Bar

    New Angular Directive

    Credit Card Fraud

    To support the increasing number of applications being developed within the Angular framework, we are delighted to release a brand new directive for KeyLines. This gives a clean and compatible way to access the power of KeyLines from other Angular components. To support your development we’ve added some fresh demos and new Angular-specific documentation.

    As usual your feedback on the release is really appreciated – we’d particularly like to know what you value most in this release and what you’d like to see in the future. Email your comments to [email protected].

    Harnessing the power of WebGL, and more

    KeyLines has always been a high performance, feature rich toolkit. But, increasingly, you have been asking us to help you visualize bigger networks. There are several discrete areas we’ve focussed on that combine to make light work of heavy visualisations for those customers with challenging datasets, while giving valuable headroom for those whose data-volumes are still increasing.

    And, in case you’re concerned that it’s going to take effort to exploit these changes in your application – good news! – we’ve maintained API compatibility, so you’ll see some dramatic improvements with no code changes.

    WebGL – unlocking the power of modern hardware

    In this release, in addition to Canvas and Flash options, we make available the option to use WebGL for rendering KeyLines assets. WebGL directly offloads calculation to the GPU available in modern PCs, Laptops and tablets running the vast majority of modern OS and Browser combinations. And, more good news, no new hardware is required to access this resource!

    Graph function optimisation

    KeyLines’ graph functions are the ‘engine room’ of our code; this is where you explore the graph structure of your data. Some of these operations are computationally expensive: e.g. the ‘neighbours’ call for a large graph has been relatively time-consuming, but its use is common with large and dense datasets.

    With some clever optimisations, including the dynamic construction of a cache, we see improvements of around 50-fold when making repeated graph.neighbours calls (average gain benchmarked against our most challenging data-sets).

    WebGL Alpha release

    As ever, we’ve tested this release very thoroughly on a broad range of devices, and across our usual suite of OS and browsers. We’re confident in the quality and compatibility of WebGL and encourage you to experiment with the functionality in the context of your applications.

    We’re making this capability available under our Alpha program. Dependent on the feedback we receive we expect to be able to mature the capability rapidly through 2016.

    More control, better controls

    Time bar - new set of events available

    KeyLines’ time bar provides a powerful way to interact with data that has time-stamped information encoded in it. We’ve added a number of new events that give you more customisation and control of time bar events – e.g. you can now present tool-tips on the control buttons; you can detect more types of discrete events to allow construction of completely custom controls that blend in seamlessly with your app.

    Nav Controls fit in better

    As a response to many requests, we’ve delivered the ability to move our standard navigation controls from the top left-hand corner of the canvas. You now have flexibility on the placement of the chart along with the ability to ‘nudge’ the controls to fit in with other assets.

    Performance Benchmarks: Details

    The figures quoted are average across a range of datasets. We’ve tested on 2014 MacBook Pro with OSX version 10.11 and Chrome 49. Due to the variation of hardware platforms the achieved performance when invoking WebGL rendering may vary significantly.

    API Changes

    • Changes to chart.options:
      • Added a setting to the overview option to allow its position to be adjusted.
      • Changed the logo and navigation options from strings to objects with properties, to allow their positions to be adjusted. However, code using string values for these options will work in a backward-compatible way.
    • New time bar events: contextmenu, dblclick, dragstart, dragend, dragcomplete, end, flashclick, mousewheel, pause, play and start.
    • graph().neigbours has a new 'hops' option to specify how many links away to look for neighbours.
    • KeyLines.mode has a new 'webgl' setting to enable WebGL drawing.
    • There is a new KeyLines.webGLSupport method which returns whether WebGL drawing is supported on the current device.

    Bug Fixes and Improvements

    • Fixed a regression related to calling ‘setProperties’ on a node when selecting it would cancel dragging.
    • Fixed a bug causing ugly font rendering in Chrome where a minimum font size was not being correctly detected.
    • Fixed a bug where dragover event would occasionally not be fired.
    • Fixed a bug where mousewheel zoom would stop working after being bound to wheel event handler.
    • Updated Angular directive to allow image base path to be adjusted separately.
    • Fixed a bug where the time bar major scale would sometimes be missing.
    • Fixed a bug where the a single data-point would not show correctly in the time bar.
    • Fixed issue where a link with a single arrow head could be reversed after being combined and uncombined.
    • Fixed issue where zooming in and out would occasionally displace nodes on map (Geo mode).
    • Fixed an interaction between Leaflet and Angular; now correctly allows access to Leaflet map object.

    2.11 Release Notes14 October 2015

    Location, Location, Location (...and Analysis)

    A major piece of KeyLines functionality exits Beta phase. Powerful new graph analysis options and a new layout are added.

    With this release of KeyLines we are proud to upgrade Geospatial (Maps) from Beta to full ‘GA’ releases. We’ve added a brand new demo (above) to showcase the benefits of combining Geo with the time bar.

    To complement the existing tools we’re excited to offer three new graph functions including ‘clusters’ to find communities in your data and also a brand new layout option, ‘lens’, that places nodes in an attractive circular pattern.

    There are a slew of other improvements and enhancements including an enhanced step-by-step guide to Neo4j integration and direct support for layers in Geo mode. To help you be more productive we’ve also added some new documentation on the use of modular JavaScript and best practice when resizing a chart.

    To give developers a jump start with projects, we’ve added a new one-click ‘download’ button to the majority of demos: now all the HTML, CSS and JavaScript assets are immediately accessible.

    And we know security is important to many of our customers, so we’ve upgraded our KeyLines SDK sites to be SSL protected: protecting traffic and providing stronger authentication.

    As usual your feedback on the release is really appreciated – we’d particularly like to know what you value most in this release and what you’d like to see in the future. Email your comments to [email protected].

    Geo (Maps)

    We introduced Alpha Geo functionality back in April this year but the reaction has been so positive and strong that we’ve accelerated it through Beta and now to “GA” release.

    As well as stabilising the maps API, this release introduces a new leafletMap function that provides direct access to the underlying Leaflet map object, allowing you to work with it directly, for example adding custom layers in map mode.

    To celebrate the release we’ve created a new ‘showcase’ Geo demo. Using open source data from the Boston “Hubway” cycle hire scheme you can explore how traffic flows vary with time and by location. The source code is directly available so you can immediately apply these powerful techniques to your own data.

    New Graph functions including clusters and eigenCentrality

    Many large networks will present ‘communities’ or clusters of sets of highly connected nodes that are completely or partially isolated from others. The new clusters function allows KeyLines to automatically identify these sets of nodes. It’s a powerful new tool to unlock insight from your network data.

    Other Features

    Driven by your feedback there are several other significant features and enhancements in this release, including:

    • New Layout: ‘Lens’ complements the existing set, giving an attractive new layout to offer fresh insight into the relations between nodes.
    • One-touch demo downloads: all the assets to recreate our demos can now be downloaded as a .zip file.
    • Alternative play mode for time bar animations: you can now choose to fix a start time and animate the graph by increasing the ‘end’ time of the range only.
    • SDK sites gain SSL security: all your communications with our SDK sites are now 256 bit SSL secured. So your log-in credentials (e.g. email addresses) are now protected by bank-grade encryption.

    New Demos!

    In addition to the Geo ‘showcase’ demo and Clusters we’ve added some more examples of KeyLines functionality in action. As usual the source code is provided to help inspire you and add more value to your application.

    • Ping (New): Ping is an easy-to-use but very powerful technique to draw attention to node(s). This simple demo gives you all you need to add some attractive animation to your charts.
    • Geo Custom Layers (New): We’ve had great feedback on our Geo (mapping) releases. With this demo we’re illustrating the new capability to use direct access to the underlying Leaflet map to add custom layers.
    • Email Analysis (Updated): Based on the Enron email dataset, we’ve updated this demo to feature two of our new SNA algorithms – EigenCentrality gives you a perspective on the influence of members of a network, while PageRank is an implementation of the original Google algorithm to help assess importance.
    • Impact Analysis (New): By using the elements found in a typical IT datacentre, this demo illustrates the power of KeyLines to quickly understand the significance of the relations between elements and the impact of failures on a system.
    • OrientDB (New): We’re proud to add a new integration demo, this time for the increasingly popular OrientDB graph database. With just a few lines of code you’ll have your data displayed in all its glory.

    API Changes

    • Added minZoom option to chart.options() to control how far the chart can be zoomed out.
    • Added 'lens' as a new layout type to chart.layout() (beta).
    • Added eigenCentrality, pageRank and clusters functions to chart.graph() (beta).
    • Added chart.map().leafletMap function.
    • Added showExtend option to time bar options.
    • Added extend option to time bar play() function.

    Bug Fixes and Improvements

    • Fixed a bug related to drawing the overview window after going full-screen.
    • Improved performance when dragging nodes when there are large number of hidden items.
    • Fixed an issue where chart would pan after layout even though all nodes were fixed.
    • Fixed a bug related to using Angular where nodes could only be dragged after a second mouse click.
    • Fixed a bug where KeyLines.create would default to canvas size of 100 x 100 if the supplied div had display:none.
    • Improved the loading time of charts using Font Icons on iOS Safari.
    • Corrected the behaviour of the ‘tightness’ option when using arrange with circle and radial shapes, now correctly matches documentation.
    • Made changes to reduce the chance of race conditions when using Angular directive.
    • Fixed a bug in map mode where changes to lat/lng using setProperties or animateProperties would not be reflected on the map.
    • Improved the behaviour of map mode when using pinch to zoom on a trackpad

    2.9 Release Notes23 July 2015

    New Developer Resources & Beta Release of Geospatial

    You’ve told us you wanted better and clearer developer resources and we’re happy to respond.

    With this release of KeyLines we are proud to introduce a new SDK website featuring new demos and documentation to make getting started and productive with KeyLines even easier.

    Due to the great feedback and positive reaction we’ve had to map mode (aka geospatial), this release also takes it from alpha to beta state, removing some restrictions and adding useful functionality.

    There are a slew of other improvements and enhancements including fully qualified support for Windows 10 and Microsoft Edge plus the ability to further customize nodes and glyphs using ‘font icons’.

    As usual your feedback on the release is really appreciated – we’d particularly like to know what you think of the new SDK site.

    Email your comments to [email protected].

    New SDK site

    The SDK site has been overhauled to improve navigation and usability. There is also some new content in the form of specific demos to better illustrate core functionality. A new and more modern look-and-feel has been applied across the site.

    New Demos:

    The API documentation layout has been changed to improve navigation and searchability – it’s now presented as a single continuous page with a navigation sidebar.

    Other new content includes:

    • Revised ‘Getting Started’ section
    • New FAQ section

    Map / Geospatial Beta Release

    Following a successful Alpha release made in April, this release takes Maps / Geospatial to a Beta release.

    Significant changes include:

    • You can now use the KeyLines navigation controls in map mode.
    • You can now use the option 'handMode: false' to enable marquee selection in map mode.
    • In map mode, toDataURL now includes the map in the chart image.
    • There are new mapCoordinates and viewCoordinates methods to convert between latitude/longitude and view positions.
    • The following chart API methods can now be used in map mode:
      • createLink
      • expand
      • load
      • merge
      • pan
      • setItem
      • zoom
      • KeyLines.setSize

    Font Icons (beta)

    The new font icons feature allows you to use characters from fonts such as FontAwesome as icons for nodes and glyphs, specifying any colour for them. This feature is in beta, and requires the Canvas renderer, so it does not work in Internet Explorer 7 or 8. See font icons in the documentation for details.

    New Platform Support

    This release introduces support for Windows 10 and the new Microsoft Edge browser.

    API Changes

    • There is a new unbind method to undo the effect of the bind method.
    • The chart hover event is now raised when dragging an external element over the chart

    Bug Fixes and Improvements

    • Fixed a bug related to hand mode and ctrl + click de-select behaviour
    • Fixed behaviour to stop histogram overlapping scale in time bar
    • Improved behaviour with large number of hidden items
    • Added progress event for tweak layout
    • Improved behaviour of createLink to avoid creating unwanted link
    • Fixed exception caused by calling setProperties during chart.each
    • Fixed behaviour when marquee selection is panned and some nodes would become de-selected

    2.7.1 Release Notes28 April 2015

    Mapping Integration

    Network views are great for looking at logical connections between things - but what if you want to see where the nodes are physically located?

    With this release of KeyLines we are proud to introduce a new feature that lets you see how your network is arranged on a map. You can even switch between the map view and the logical view!

    The new map mode comes with instructions on how users can use it, new sample code projects and comprehensive reference documentation.

    As usual with new features we are releasing this in 'alpha' form and would love to get your feedback before we harden the API in the coming months.

    Please give as much feedback as possible on this new way of visualizing graphs!

    Email your comments to [email protected].

    Hand Mode

    We have altered the implementation of 'hand mode'. From this version of KeyLines, moving the chart by dragging the background will not clear the chart selection. You can still click the background to clear the selection.

    If you would like to keep the old behaviour of clearing the selection this code sample will help:

     function clearSelection() { if (chart.options().handMode) { chart.selection([ ]); } }
     
    chart.bind('mousedown', clearSelection); 
     

    Other Features

    • The radial layout is now 'stable', so nodes will move around less when re-applying it.
    • When arranging link positions between two nodes, only shown links are now included.
    • A new animation bends links to the right position when hiding or showing their sibling links.

    API Changes

    • Added a parameter to chart.filter's callback giving details of the items shown and hidden.
    • Added a new touchdown event for the time bar.

    Bug Fixes and Improvements

    • Clarified the documentation of chart.createLink and chart.combo().find.
    • Fixed a problem that stopped items with id '0' being selected in Flash mode.
    • Added a better error message when KeyLines.create is passed an incorrect element id.
    • Improved the performance of chart.each.
    • Made the time bar draw more smoothly.
    • Improved the behaviour of radial layout in some situations.
    • Improved the drawing of bubbles containing several lines of text.
    • Fixed a problem with right-click events in the time bar in old IE versions.
    • Fixed a problem with dragging the time bar with the right mouse button in Flash mode.
    • Made other performance improvements.

    2.5.1 Release Notes9 March 2015

    Fine-Tune your Charts

    Lots of developers have been asking for more control over how the chart looks, so we are happy to introduce a range of new options for visual appearance. Many of these are shown in a new Chart Styles demo:

    • Large and small arrows on links
    • Selection styling: much more freedom to choose how selected items look
    • Label height adjustment for fine control when using certain fonts. See labelOffset chart option
    • Fine control over how links join onto nodes
    • Dashed borders for nodes
    • Glyph border colour can be set using the glyph.b property
    • Control over how links select when marquee dragging. See marqueeLinkSelection chart option

    Minor Features

    • Time bar height transitions are now animated
    • New 'click' event for the time bar
    • timebar.zoom('fit') has a new option - you can pass in an id or list of ids to fit
    • The highlight colour of the time bar scale is now customisable via timebar.options scale.highlightColour
    • Single node combos. Previously when creating a combo with just one node inside it the combine function would raise an exception. Now this is allowed and the combo is created.
    • KeyLines.dashedLineSupport() returns whether the current browser supports dashed lines
    • Hierarchy layout keeps nodes in roughly the same positions when called multiple times
    • SDK page source prettified & dependencies made clearer
    • Refactoring to reduce size of keyLines.js file
    • HTML5/Flash switch removed: to test Flash using the KeyLines site use IE7 or 8.

    Bug Fixes

    • Performance improvement for chart.merge with large numbers of items
    • Faster drawing performance for charts with many hidden items
    • IE11 fix: generating PNG images when overview was shown caused error
    • Generating PNG images caused navigation controls to behave differently
    • Glyph text was rendered too low on the screen at small font sizes
    • Radial layout didn't always space out items evenly

    2.3.1 Release Notes3 December 2014

    Time bar now fully supported!

    Following positive feedback from our beta testers we are bringing the time bar out of beta. The API is now fixed and we will keep backwards compatibility with the current API in all future releases.

    • Background colour can be set
    • Slider colours can be set
    • Fix: selection points were drawn one item to the left
    • Fix: small ranges were displayed incorrectly

    KeyLines AngularJS Directive

    Thanks to some great help from our AngularJS alpha testers, our AngularJS directive is now available. Please give us as much feedback as you can.

    Changes:

    • The directive is now an attribute directive ('A') rather than an element
    • The event model uses Angular's $broadcast mechanism
    • The KeyLines directive code has been reimplemented
    • The directive can be used to create time bars

    Features

    • New search demo shows how to find nodes, show selection & zoom them into view
    • Combo namespace has new find function to find the parent combo of an id
    • Yosemite Safari 8 support

    Bug Fixes

    • Radial layout overlapped child nodes in certain cases
    • chart.merge did not behave correctly for items with numeric ids
    • Animated glyphs containing text were flickering
    • zoom('in') and zoom('out') always animated, even with {animate: false}
    • time parameter in chart.expand option was not working
    • Cut-out images did not use transparency
    • IE10: occasional layout crash due to bad optimisation in the IE10 JavaScript engine
    • IE11: a certain Intel HD graphics driver (9.18) on Windows 7 causes HTML5 canvas to behave differently from the HTML5 specification - which caused navigation controls and cut-out icons not to draw

    2.1.1 Release Notes7 October 2014

    Time bar beta!

    New demos:

    • Mapping demo combines the time bar with a geographic heat map
    • Fetch and merge shows how to merge data into the time bar dynamically
    • Overview shows how multiple time bars can be shown and coordinated

    New time bar features:

    • Histogram colours are now settable
    • You can toggle the visibility of time scales and control bar
    • There are two new interaction options for the sliders
    • There is a new 'merge' function that can be used to add data dynamically

    Easier Downloads

    We've had feedback that it has been difficult to put together all the files that KeyLines uses. So now the downloads page has a single .zip file that contains the KeyLines JavaScript file, asset files, fonts, etc., all in one place. The zip file also has a simple .htm file to get you started more easily.

    Using SVG for nodes

    Some developers want to use SVG for their node icons, so we have done extensive testing on browser support for drawing SVG within KeyLines, and had some surprising results. Essentially Chrome and Firefox are OK, but there are some KeyLines functions that are not supported: read the details here.

    The safest approach is definitely to use PNG or JPG images until browsers catch up.

    Asset deployment

    Flash and assets: before this release, the flash file embedded the KeyLines image assets within the .swf file. As the number of assets increases this is no longer a good strategy. As of this release the flash version loads the KeyLines assets dynamically, just like the HTML5 version. This shouldn't cause any compatibility issues as long as you set the asset path before calling KeyLines.create.

    Fixes & Improvements

    • Full screen now fixed on Safari 7.1
    • Demos now can toggle the right hand panel when in full screen mode
    • Various time bar fixes
    • chart.selection remained after a chart.clear
    • chart.viewOptions wasn't checking parameters properly
    • Safari 7.1 support
    • Getting started guide is much clearer

    2.0.1 Release Notes16 July 2014

    Introducing the Time Bar!

    Ever since KeyLines was first created, people have been asking about how to show their graphs changing over time. So we are excited to announce that KeyLines 2.0 has a whole new time bar component that you can use to explore your graph data.

    The new time bar comes with instructions on how users can use it, three new sample code projects (1, 2, 3 ) and comprehensive reference documentation.

    We have had to change a few things around to accommodate the new component. See below for details. And because it is such a new feature we've decided to release it as 'alpha' - meaning we'd like your feedback before we harden the functionality and API.

    Please give as much feedback as possible on this new way of visualizing graphs!

    Email your comments to [email protected].

    Site Redesign

    This SDK site has been redesigned to allow easier navigation.

    • The API Reference and Formats pages are now easier to find
    • Finding functions is now easier using new dropdown menus in the API Reference & links in the Formats page
    • Demos have been categorized into 'Basic' and 'Advanced'
    • We wrote down our support process to explain how to reach us and what we do when change requests are raised

    More Features:

    • Chart Layouts: A new 'tweak' layout can be used to adjust the chart when new items arrive or items are removed.
    • Graph API: Has a new {all: true} option on all functions which allows graph operations on hidden items
    • Chart API: chart.filter has a new 'type' option that allows easier filtering of links or nodes
    • Chart API: New chart.pan('selection') call fits selection to window without zooming - use as an alternative to chart.zoom('selection').

    API Changes:

    • New time bar namespace and associated time bar events.
    • New KeyLines.create signature replaces older signature. Scripts using the old signature will still work. The new signature should be used for all new projects & is designed to facilitate creating multipe KeyLines components at once - with a single callback that is called once everything is ready.
    • Rename of KeyLines.charts to KeyLines.components. 'Components' can either be time bars or charts. Existing code that uses KeyLines.charts will continue to function as before.
    • New paths function replaces imageBasePath, setCanvasPaths and setFlashPaths. The older functions still exist and will continue to work.
    • New options function replaces displayOptions and interactionOptions. The older functions still exist and will continue to work.
    • The default colour for the chart navigation controls has changed to grey. To change this colour, see chart.options.controlColour

    Bug Fixes:

    • Layout bug: structural layout had errors with charts with numeric ids
    • Documentation: various corrections, including clarification of combos().combine callback arguments
    • SDK Site: several bugs on IE7 & 8 fixed
    • SDK Site: resize demo had issues with browser resize

    1.17 Release Notes24 April 2014

    Introducing Halos!

    Halos are great for showing events on nodes.

    See the Animation demo and Data Format documentation for how to use them.

    More features:

    • New ping function makes it easy to work with halos
    • New 'queue' option in animateProperties
    • New dashed and dotted styles for links - only for modern browsers!
      • Supported browsers: IE11, Firefox 7+, Chrome (any), Safari 6+

    Demos:

    New website pages:

    Fixes:

    • Text positioning when using shape nodes, centred text and glyphs had a bit of offset
    • Bubbles rendering issue in IE9
    • Watermark images on background didn't catch some mouse events
    • Fixed an issue with listeners on KeyLines component removal
    • Fixed an issue with Unicode encoding on some servers
    • Save & Load demo didn't work properly on iOS / Safari
    • Thin line drawing issue fixed

    1.15.1 Release Notes6 February 2014

    Features:

    • Retina screen support! Users on retina screens will now see that KeyLines is crystal clear.

    Fixes:

    • Coordinates did not work correctly in scrollable divs
    • Touch device dragging did not raise 'dragover' event
    • Add 'gray' to CSS colors
    • chart.labelPosition returned incorrect values in some circumstances
    • Transparent images cropped to circles drew black borders around the edges
    • Setting zoom programmatically failed unless animating
    • setSize caused blurriness in some circumstances
    • Drawing improved when dragging things near the edge of the canvas
    • Flash component not visible in IE11
    • chart.load now uses last saved view options
    • Various drawing improvements
    • Various documentation clarifications

    1.13.1 Release Notes 16 December 2013

    Introducing Bubbles!

    Bubbles are a great new way of showing information on nodes and links.

    See the Data Format documentation for how to use them.

    More features:

    Fixes:

    • Glyphs misplaced on link labels with multiline text
    • Multiline text where first line is a new line breaks rendering on chart.load
    • Layout has new 'straighten: false' option to prevent link offsets being set to zero on layout
    • New dragPan option for customising drag behaviour at the edge of the chart

    1.11.19 Release Notes31 October 2013

    IMPORTANT: keylines-html5.js is removed at this release. The new version of keylines.js MUST NOT be loaded alongside an old version of keylines-html5.js. Please be sure to remove all references to keylines-html5.js from your web pages when upgrading to this version of KeyLines.

    New Features:

    • Combined keylines-html5.js into keylines.js
    • Enhanced shortestPaths to return onePath including both nodes and links
    • IE11 Support
    • iOS7 Support

    New Demos:

    • Find Path demo illustrating the use of the updated shortestPaths API

    Fixes:

    • Using graph API in flash went wrong when using various special characters as ids
    • iOS7 fix for arc rendering
    • Stack overflow when laying out a very large number of disconnected components
    • When creating combos, combo links were created with the wrong arrow direction
    • Console log warning loading background.png removed
    • More complete 'hello world' sample in getting started guide
    • chart.labelPosition was incorrect for multiline labels

    1.9.17 Release Notes31 August 2013

    New Features:

    • New foreground function makes it easy to foreground/background items
    • HMTL5 drag supported via 'hover' event firing during HTML5 drag over chart
    • Font colour for selected items now settable in chart.options
    • chart.zoom('height') fits height of chart to window
    • New cancellable 'mousewheel' event

    New Demos:

    Fixes:

    • animateProperties had bug when specifying undefined properties

    1.9.15 Release Notes11 June 2013

    Features:

    • Full support for touch events & gestures in IE10
    • Standard layout reimplemented
    • New background layer for items, see new 'bg' property
    • New filter function for show and hide makes your code much simpler

    The new standard layout has the following improvements:

    • Clearer spacing of nodes in dense networks
    • More regular link lengths
    • Clearer positioning of fans of single nodes
    • More compact in general
    • Faster to compute (about 30% faster)

    1.9.13 Release Notes25 April 2013

    Features:

    • option maxItemZoom makes links easier to see in dense networks (beta)
    • Hidden items can be analysed by graph functions using {all: true} option
    • Faster performance per frame - each frame render shorter by approx 25%

    Fixes:

    • Circular icons now smoothly alpha at their edges
    • dblclick event returned null id argument on Windows
    • dblclick default action was not overridable
    • dblclick on navigation controls zoomed the chart
    • shortestPaths returned incorrect results when using distances/weights
    • Documentation of IE9/IE10 setting to allow HTML5 canvas on intranet sites
    • Text rendering respects alpha when zoomed out
    • Layouts reset link offsets (uncurve links)
    • Various fixes for combos when used with hidden items
    • IE10 lacked mouse interactivity on touch devices (Windows 8)

    1.9.11 Release Notes21 February 2013

    Features:

    • (Beta) Circular icons - see the new 'ci' property on nodes
    • New create link function
    • New expand function for adding data smoothly to the chart in one function

    Fixes:

    • dblclick event was not fired properly on items
    • Various fixes for Combos (Combos are still in Beta)
    • Fixed nodes in pairs weren't actually fixed during the layout

    1.9.9 Release Notes16 January 2013

    Features:

    • (Beta) New 'combo' API for combining/uncombining nodes
    • The font family can be set chart-wide, or on a per item basis (HTML5 only).
    • Colours can be defined with CSS syntax, e.g.,'#F00', '#FF0000', or 'red'
    • Drag 'move' can be customised by adding other items to drag
    • New dragover and dragcomplete events
    • (Beta) New 'contains' function for finding items within a shape

    Fixes:

    • Images were loaded too often when the chart changed
    • Mouse wheel zoom is now animated
    • Mouse wheel is buffered to fix over-quick zoom on OSX with trackpad
    • chart.show could be used to show links with only one end

    Note that the font changes gives basic support for languages such as Arabic, Chinese, Korean, etc.

    1.9.7 Release Notes27 December 2012

    Features:

    • Hierarchy has new orientation option
    • New 'imageBasePath' option
    • New 'circle' and 'radial' options when calling arrange
    • 'prechange' event now passes argument that describes what is changing
    • 'hover' event also raised when chart is locked (allows tooltip behaviour on locked chart)
    • createChart now can be called without specifying width and height

    Fixes:

    • ids returned by events no longer have the sub-item codes appended after '#'
    • Dragging occurs only when moving the mouse/touch a few pixels: items are slightly 'sticky'
    • Compatibility with RequireJS
    • Zero size containing div causes crash on load
    • Layout function raises 'prechange' event
    • Border colours would sometimes leak across many items at once
    • 'dragstart' and 'dragend' now also raised by navigation controls and overview window
    • font now looking better on IE<9 on SDK site
    • issues with Flash component when id of item was === 0
    • graph().distances function no longer returns Infinity for items which are not connected: they are omitted from the returned object instead

    1.9.5 Release Notes8 October 2012

    Features:

    • k-Cores: a way of discovering tightly coupled groups (see the Filters demo)
    • Shapes: boxes and circles
    • Image nodes are now drawn in a background layer
    • Resize handles are turned off by default: use the 're' property to re-enable
    • Links without text show selection state as small circles
    • Link length is configurable: see new link properties b1 and b2 (b = 'backoff')

    Fixes:

    • Various fixes for resize handles

    API Deprecation:

      The '#t', '#ne', etc. that were appended to the id strings returned by events will be deprecated in the next release. The sub-item codes are now returned as additional parameters to the events - see the event documentation.

    1.9.3 Release Notes25 September 2012

    Features:

    • (Beta) Arrange function for 'grids' of nodes
    • (Beta) Tightness of layouts is now adjustable

    Fixes:

    • Chrome/HTML5 was making too many calls during the mouse move event to get cursor images - now less frequent
    • The fixed option for layouts did not work in Flash under IE8
    • 'Self-loops' are now disregarded: previously links from an end to itself were allowed but never drawn

    API Deprecation:

    • Events 'layoutstart', 'layout' and 'layoutend' are now removed - please use 'progress' instead. See Filters demo for sample code.

    1.9.1 Release Notes3 September 2012

    Features:

    • Social network analysis measures Closeness and Betweenness
    • Radial & Structural layouts now out of beta
    • Animating colours is now possible through animateProperties
    • Image generation (toDataURL) can now toggle visibility of gradient, watermark & logo

    Demos:

    • Enron demo more complete, uses new SNA measures and has link strength

    Fixes:

    • Flash version had issue when using numeric ids for items during graph calls
    • Various documentation fixes

    API Change:

    • New generic 'progress' event.

    API Deprecation:

    • Events 'layoutstart', 'layout' and 'layoutend' are now deprecated & will be removed in the next release - please use 'progress' instead from now on. See Filters demo for sample code.

    1.7.7 Release Notes2 August 2012

    Features:

    • New Radial layout now in beta!

    Fixes:

    • Loading keylines-html5.js before keylines.js caused errors
    • Packing algorithm very occasionally raised an exception

    1.7.5 Release Notes24 July 2012

    Fixes:

    • HTML5 canvas raised exception when encountering a missing image - now uses blue X as a replacement like Flash implementation
    • shortestPaths should return a distance
    • chart.clear() function caused hang
    • Graph API should check arguments and throw exceptions when ids not present
    • Charts with numeric ids caused issues in layouts and graph API in flash only
    • Graph traversal functions did not always respect direction
    • Dropdown menus work on SDK site work in IE7 & IE8
    • Enron demo now works in IE7 & IE8

    1.7.3 Release Notes10 July 2012

    Features:

    • Layouts now arrange disconnected components using a packing algorithm
    • Graph API for path finding, navigation, component discovery & more
    • New each & clear functions on the chart

    Fixes:

    • Layout function did not always call the callback on completion
    • Layout default options were not set properly
    • Layout used too much empty space using the {fit: true} option
    • Firefox < 10 now supported
    • Layout: Hierarchy threw exception if no top ids were set & if given link ids instead of node ids
    • Undocumented 'smoothTransition' call removed

    1.5.5 Release Notes15 June 2012

    Features:

    • Navigation controls now resize down like Google Maps when the component height is small
    • Bounding box drag now uses centre of items as the selection rule

    Fixes:

    • Various documentation bugs
    • Hover event passes x, y coordinates

    New webiste pages:

    • New browser settings page
    • New third party tools page

    1.5.3 Release Notes27 May 2012

    Fixes:

    • Canvas: implementation of setSize resets view zoom and origin
    • Recent CDN changes did not set Access-Control-Allow-Origin header, causing Firefox and IE9 to not load webfonts in Canvas implementation. Note if serving fonts from a different domain you will need to set this header too
    • Flash: navigation controls disappear when showing curved links
    • Release Notes started

    Breaking Changes

    Breaking changes are changes to the behaviour of an existing object, function, event, option, parameter or value in the API.

    Some changes are minor enhancements that shouldn't adversely affect your code. In exceptional circumstances, we may make changes to behaviours in your existing implementation. The details below will help you make the necessary code changes.

    Note: New API features that don't affect existing code are not breaking changes. They're described in Release Notes as Enhancements.

    8.0 Breaking Changes17 September 2024

    Changes to defaults

    • In previous versions, labels were drawn over glyphs by default. From 8.0, glyphs are now drawn over labels by default because this ordering is generally better when using both labels and glyphs for styling.
    • To keep the order as before, with labels drawn over glyphs, set the legacyGlyphAndLabelOrdering option to true.

    • The existing straighten option has now also been added to chart.combo().arrange(), to improve the consistency between layout and arrangement behaviour. It's true by default, meaning that combo arrangements now also have link offsets reset by default. To keep link offset behaviour unchanged, set straighten to false.

    Changes to bundled resources

    The KeyLines bundle has been streamlined, and third-party resources have been removed. Specifically, the css, map, and pdf directories, along with some redundant files from the images and fonts directories have been removed.

    Any required files are listed, with links, in the Leaflet Integration and PDF Export documentation sections, and can also still be accessed in the 7.8.1 Long Term Availability (LTA) release (or earlier).

    Changes to item validation

    In previous versions, it was possible to create a link which had id1 and id2 specified, but omitted type: 'link' in its definition. This link looked the same as regular links but didn't respond correctly to some user interactions.

    From 8.0, we've improved validation of items and this is no longer possible. To create a link, you must always set id1, id2 and type: 'link'.

    7.0 Breaking Changes27 February 2023

    Changing default layout from 'standard' to 'organic'

    In previous versions, the default layout that was applied when running chart.layout() or chart.expand() was 'standard'.

    From 7.0, the default layout is now organic as it is our most advanced force-directed layout.

    Chart.expand() API

    The packing: 'adaptive', which is the default packing when running chart.expand(), now behaves differently when the function is run with a default layout.

    This is because the default layout has changed from 'standard' to 'organic' and the packing behaviour is different for the two layouts:

    • standard - 'adaptive' option keeps items fixed except for the items immediately neighbouring the new nodes
    • organic - 'adaptive' option may move more items in the chart, but movements are as small as possible

    If you want to use the default organic layout with a packing behaviour similar to the previous behaviour, specify fix: 'nonadjacent' in the options object.

    Alternatively, if you want to continue using the standard layout and keep the previous packing behaviour, you can set the layout explicitly to 'standard' when running chart.expand().

    Chart.layout() API

    The default packing option for chart.layout() is now 'circle'. To restore the previous behaviour, specify packing: 'rectangle' in the options object.

    KeyLines no longer cloning the d property

    In previous versions, KeyLines would deep clone the d property value every time the property was imported to the chart model or retrieved from it:

    // the d property on node 'a' is set and its value is cloned
    var d = { value: 1 };
    chart.setProperties({ id: 'a', d });
    
    d.value = 2;
    console.info(chart.getItem('a').d.value); // 1
    

    From 7.0, KeyLines no longer clones the object and the data inside the d property is instead retained on the node:

    // the d property on node 'a' is set and its value is not cloned
    var d = { value: 1 }; 
    chart.setProperties({ id: 'a', d });
    
    d.value = 2;
    console.info(chart.getItem('a').d.value); // 2

    This new behaviour, which improves performance and memory usage, affects the following KeyLines functions that can accept or retrieve d properties: chart.animateProperties(), chart.createLink(), chart.each(), chart.expand(), chart.filter(), chart.foreground(), chart.getItem(), chart.load(), chart.merge(), chart.serialize(), chart.setItem(), chart.setProperties().

    To restore the previous behaviour, deep clone the object containing the d property before passing it to KeyLines.

    Removing callbacks from public API

    In previous versions, asynchronous functions could either provide a callback parameter or return a promise.

    From 7.0, async functions are promisified by default to align with modern standards. As a result, we've removed KeyLines.promisify() from the API, Typescript and documentation.

    If you are already using KeyLines with promises, you don't need to change your code. You can, however, remove your call to KeyLines.promisify() as it has no effect. If you are using KeyLines with TypeScript, you need to remove KeyLines.promisify() as you will see a build error that the function has been removed from the type definitions.

    See our Asynchronous JavaScript documentation for more details about promises.

    How to continue using KeyLines with callbacks

    The KeyLines.callbacks() function can be used to continue using KeyLines with callbacks. This wrapper function returns a KeyLines object that works with both callbacks and promises so that you can easily gradually update your code to use promises. We recommend migrating to promises as soon as possible.

    See the Using KeyLines with callbacks documentation for more details.

    Note that the following breaking changes were introduced in 7.0 for callback users:

    • Previously, some errors from KeyLines could be handled synchronously in a try/catch statement. From 7.0, synchronous error handling is no longer available for asynchronous functions.
    • If you want to add special error handling when using callbacks, you should listen for unhandled exceptions instead:

      //  browser
      window.addEventListener('error', function(err) {
        // do something with the error
        // the error may still be shown in the console depending on the browser
      });
      
      //  Node and Modern JS
      process.on('uncaughtException', (err)=> {
        // do something with the error
      });
    • Previously, using asynchronous getter/setter functions as a setter also returned the current value. From 7.0, setters no longer return the value. To retrieve it, call the getter:
    • chart.options({ minZoom: 0.01 });
      const currentOptions = chart.options();
      

    Removing shape nodes from public API

    In previous versions, shape nodes were a special node type with w and h (width and height) set that was drawn in the chart background under regular nodes and links.

    In 7.0, we've removed shape nodes from the public API as they have been superseded by more modern rectangular combos and rectangular nodes. If your code previously contained shape nodes with w and h set, these nodes will now be drawn as rectangular nodes in the node layer.

    If you want to continue using shape nodes, you need to:

    • make sure your nodes have w and h set
    • set the legacyShapeNodeBehaviour option to true
    • if you're using Typescript, replace your shape TypeScript definition with node TypeScript definition

    Note that it's not possible to use both legacy shape nodes and regular rectangular nodes simultaneously in your chart.

    6.0 Breaking Changes18 June 2020

    Expand API

    From 6.0, the default expand behaviour has been changed to make use of the adaptive layout features released in 5.10. Calling expand() with default options will now only make changes to your chart that are needed to adapt to the incoming changes. The exact changes in defaults are:

    Show full details
    • default options: The default options when specifying a layout are now the same as when supplying no arguments.
    • packing option: The default for the packing option for the expand() API is now 'adaptive'. To restore the previous behaviour, specify packing: 'rectangle' in the expand options object.
    • tidy option: The default for the tidy option for the expand() API is now true. Note that tidy is deprecated. Use the packing option instead. To restore the previous behaviour, specify tidy: false in the expand options object.
    • fix option: The default for the fix option for the expand() API is now 'adaptive'. To restore the previous behaviour, specify fix: 'nonadjacent' in the expand options object.
    • consistent option: The default for the consistent option is now true. To restore the previous behaviour, specify consistent: false in the expand options object.
    • image loading: The expand() API no longer waits for images to load.

    getItemInfoAt API

    • return value: The returned subItemInfo property has been replaced by subItem, which returns the same value.

    Chart Functions

    • The createLink() function can now only be called when the pointer is down on the chart, and should therefore be typically called from within a drag-start event handler as intended.
    • For users of the bind() events engine, it should be called from within a mousedown event handler.

    Chart Options

    • The default for the link dragging option is now false. To restore the previous behaviour, specify drag: { links: true }.
    • The default for the adaptiveStyling option is now true. To restore the previous behaviour, specify zoom: { adaptiveStyling: false }.

    Chart Events

    Some events used with the bind() API have modified behaviour. Most of these are enhancements. Consider migrating to the on() API instead.

    • Ctrl + Click on MacOS now fires the 'context-menu' event instead of the 'click' event.
    • Selection is now updated after a click instead of a pointer-down / mousedown event.
    • To prevent default selection, use the selection-change / selectionchange event.

    • Dragging items no longer selects them by default, which allows you to drag items without losing your selection. As a result:
      • chart.selection() will not always give you the list of dragged items. When dragging items with the bind() API, check whether the id is selected.
        chart.bind('dragstart', function (type, id) {
          const selection = chart.selection();
          const idsBeingDragged = selection.includes(id) ? selection : [id];
          // etc 
        });
      • Dragged items will not always be drawn over other chart items unless they are also selected.

    5.0 Breaking Changes12 November 2018

    Map mode

    • drag-start returns: The drag-start event now always returns a 'hand' type when dragging on the map in map mode, where previously it could return ‘move’ even though nodes cannot be dragged.
    • Leaflet version support: Map mode requires Leaflet version 1.3.4, which is included in the KeyLines download. Earlier versions of Leaflet aren't supported, and later versions will trigger console warnings.
    • Map tile wrapping: By default, map tiles wrap around the world, so you'll see Asia to the west of America if you zoom out far enough. To restore the previous behaviour, specify noWrap: true in the tiles map options settings.
    • toDataURL image exports: If you use chart.toDataURL to export an image of the chart, the width and height parameters are ignored. To get different sized images, use KeyLines.setSize before calling toDataURL, and then reset to the previous size. To mask the underlying transition and let your users know that an export is running in the background, you may want to add a loading "spinner".
    • viewchange events: When in map mode, multiple view-change events are now no longer fired during a pan of the map. Instead a single ‘view-change’ event is fired at the end of the drag.

    Assets

    • Asset images: These are now embedded in KeyLines, so you no longer have to add the KeyLines assets folder to your projects. The 'assets' option in KeyLines.paths() no longer has any effect. To replace the navigation controls with your own custom images, turn off navigation controls and add your own controls as elements in your page. For an example, see the Social Network Analysis demo.
    • Missing images: It's no longer possible to overwrite the 'missing images' icon. To display your own icon for missing images, replace them before they're added to KeyLines.
    • Cursor support in IE11 and Microsoft Edge: IE11 and Edge don't support embedded cursors. If you hover over a node, the default pointer will show as the mouse icon instead of the KeyLines 'openhand' cursor.

    Image loading

    Unlike previous versions, KeyLines 5.0 loads images asynchronously, so images are added to the chart as soon as they're available.

    Asynchronous functions that load image data into the chart, such as chart.load() and chart.setProperties(), are returned before image loading is complete Their callbacks/promises are resolved once images are loaded. See Asynchronous JavaScript for more details.

    Using images from different domains in HTML5 Canvas

    In most cases, you couldn't view insecure images from different domains in earlier KeyLines versions due to CORS security restrictions. One exception was images shown in KeyLines Canvas mode. These could be rendered but not exported or cut out into circular shapes.

    In KeyLines 5.0 and later, all insecure images will be marked as missing. This means KeyLines will be consistently clear about which images can be exported. For details of how to make sure all images are secure, see Cross-Origin Images (CORS).

    One effect of this is that if you download demos from this site and run them directly from the file system, you'll no longer see any images in the chart. We always recommend serving downloaded demos from a web server instead of the file system.

    chart.toDataURL

    • Default size: In previous versions, the default size for the image created by chart.toDataURL was 100x100 pixels if no width and height were specified. The default size is now the size of the chart element.
    • Callback values: We've removed an undocumented, legacy return value for this function, so you should check to make sure you're using the value returned by the callback. For more information, see Asynchronous JavaScript.
    • fit option: The default fit option has changed from 'view' to 'exact'.

    chart.setProperties

    chart.setProperties() no longer removes properties that are set to null or undefined. If your code previously used 'undefined' to test whether properties existed, you'll now also need to check for values.

    chart.setProperties({ id: '1', t: null }, false, function () {
      var item = chart.getItem('1');
     
      console.log(item.t); // null
      console.log(item.hasOwnProperty('t')); // true
    });

    Events behaviour

    • selection-change chart event: The selection-change chart event no longer incorrectly fires during clicks on the chart background when nothing was previously selected. If you still need to react to a click on the background, use the click event instead.
    • 'redraw' event: We've removed an undocumented event of type 'redraw'.

    Node shape object property options: 'e' and 'w'

    Following our deprecation announcement on 15 January 2018, the following node shape (sh) object property options are no longer available or supported:

    • 'e'- east-pointing signpost
    • 'w'- west-pointing signpost

    If you want to customise node shapes, use font icons. For examples, see the Style Nodes demo.

    Link object properties: st and y

    Following our deprecation announcement on 15 January 2018, the horizontal links feature is no longer available or supported. As a result, the following link properties have been removed:

    • 'st' - sets a horizontal link style
    • 'y' - sets the position of the central section of the link along the Y-axis in world coordinates

    We've also removed the'fanLength' chart option, previously used to configure horizontal links.

    TypeScript definition updates

    We've taken the properties 'glyphs' and 'transition' (used for the 'linkStyle' chart option) out of the 'LinkStyle' interface and moved them to a new interface 'LinkStyleOptions'.

    4.0 Breaking Changes15 January 2018

    chart.bind('double-click')

    In previous versions, double-clicking a combo had no effect. Now, double-clicking a combo toggles between open and closed states by default.

    To prevent this behaviour, bind to the double-click event and return true. Note that to preserve the default behaviour of a double-click on the chart background causing a zoom, you should not return true in the case where the background is clicked. For example:

    chart.on('double-click', function ({id}) {
      return id !== null; // return false if the background is double-clicked; true otherwise
    });

    chart.each

    We've added an 'items' option to chart.each. It lets you choose which items to iterate over when using combos. The options are:

    • 'underlying' - iterates over items that are not combo nodes or combo links (default).
    • 'toplevel' - iterates over items, including combos, that are not inside other combos.
    • 'all' - iterates over every item.

    To maintain existing behaviour, add items: 'toplevel' to the chart.each options object.

    chart.filter and chart.foreground

    We've deprecated the 'combos' option on chart.filter and chart.foreground and replaced it with the 'items' option.

    To maintain existing behaviour, if you're using:

    • combos: true, replace it with items: 'underlying'
    • combos: false, replace it with items: 'toplevel'

    The default option has changed from combos: false, to items: 'underlying'. If you were using the default setting in 3.8 and earlier, you need to explicitly set items: 'toplevel' to avoid a behaviour change.

    chart.getItem

    chart.getItem now returns items inside combos. Previously, it returned null. To find out whether an item is inside a combo, use chart.combo().find.

    chart.hide, chart.removeItem and chart.show

    chart.hide, chart.removeItem and chart.show now apply to items inside combos; previously they didn't. To find out whether an item is inside a combo, use chart.combo().find.

    chart.layout consistent option

    If your current KeyLines version has consistent: true set in chart.layout, you may get a different result the first time you run a layout after upgrading. This is a one-off breaking change: subsequent layouts will be consistent with your first result.

    chart.layout('lens'), chart.layout('standard') and chart.layout('structural')

    We've improved the following layouts:

    • Lens - it now provides a more dense layout in some cases where nodes used to be thinly distributed.
    • Standard and structural - they're now better at spacing large items that could sometimes overlap.
    • In structural layout only, we've also improved the way nodes are arranged in individual groups to reduce the chance of them overlapping.

    The new layout behaviour improves every use case we support, so there is no option to maintain the existing behaviour.

    chart.options(hover)

    We've reduced the default hover time in the hover chart option from 1000 to 150 milliseconds. To maintain existing behaviour, call:

    chart.options({hover: 1000})

    chart.ping

    If you call chart.ping on a node inside a closed combo, KeyLines will now ping the first visible parent combo. If you want to maintain existing behaviour and not ping the parent, you must first use chart.combo().find and chart.combo().isCombo to determine whether the node is in a closed combo.

    If you use chart.ping to animate a node or link, the animated effect now appears in front of any shapes on the chart. This new ping behaviour improves every use case we support, so there is no option to maintain existing behaviour.

    Selected nodes

    When users select or drag nodes, they're now always drawn on top of unselected nodes and no longer hidden behind them. This new behaviour improves every use case we support, so there is no option to maintain the existing behaviour.

    End of support for IE9 and IE10

    Microsoft stopped supporting these older versions back in January 2016. In KeyLines 3.5, we announced our intention to follow their direction. KeyLines support for IE9 and IE10 has now ended.

    3.5 Breaking Changes4 July 2017

    • Links - KeyLines now enforces that the id1 and id2 properties on links cannot be changed once a link has been loaded into the chart. To change the nodes that a link points to, you should remove the link and replace it with a new one.
    • Shapes - the ci (cutout circle) property no longer applies to this object type.
    • chart.contains() - hidden nodes in shape objects are now returned.
    • KeyLines.mode() - 'auto' option now defaults to WebGL (if supported).
    • chart.serialize() - we’ve changed the way the items property is serialized for combos when using chart.serialize().

      Chart data serialized from an older version of KeyLines will still load correctly in 3.5. If you just use chart.serialize() to save the current chart or to maintain an undo/redo stack, you won’t need to change anything.

      However, if your code parses the output from chart.serialize() and you use combos, chart.serialize().items will now include items contained in combos.

      To iterate only over items not contained in combos, use chart.each() instead.

    3.3 Breaking Changes15 December 2016

    • Time bar: removed longDays and shortDays options.

    3.1 Breaking Changes28 June 2016

    • We've changed the way KeyLines handles fonts. Earlier versions used the Ubuntu font family. KeyLines now uses your browser's default sans-serif font, and defers to an external font loader for font icons. If you're using font icons, follow the migration steps described in Font Loading.

    Deprecations

    When we announce that a version of KeyLines, API, platform, database or framework is deprecated, it means that we intend to end support for it in the future and recommend that you stop using it now. For more details, see Deprecation Process.

    For a list of supported devices, operating systems and browsers, see Compatibility & Supported Platforms. To share your feedback, contact [email protected].

    August 2025: Deprecating legacy API

    We've deprecated the following legacy APIs, so you should replace any that exist in your code.

    • The KeyLines.getFontIcon() function is deprecated and should not be used. Instead, you can set the font icons directly in the t option on the fi property. Set the font icons directly also when using imageAlignment option.

    June 2025: Deprecating legacy API

    We've deprecated the following legacy APIs, so you should replace any that exist in your code.

    • The b option for glyphs is deprecated and should not be used. To achieve an identical effect, set the colour option in the border property.

    September 2024: Deprecating legacy API and retiring LTA versions

    We've deprecated the following legacy API, so you should replace any that exist in your code.

    We're retiring the following LTA versions:

    • We have deprecated KeyLines version 5.10 LTA, which means that from 1 October 2025 this version will no longer be available and support for this version will end.
    • If you are using this version, we strongly recommend upgrading to the latest version so that you can make use of the full features of KeyLines.

    • We have also deprecated KeyLines version 6.1.3.1 LTA, which means that from 1 March 2026 this version will no longer be available and support for this version will end.

    February 2024: Deprecating legacy API

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • The path option for links in chart.options() is deprecated and should not be used. To achieve an identical effect, you can use the linkShape option in chart.layout().

    February 2023: Deprecating legacy APIs

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • The standard layout has been deprecated. Organic is now the new default layout.
    • The tweak layout has been deprecated. Use the organic layout with mode set to 'adaptive' instead.
    • The tc option has been deprecated. To position your label, nest your label inside a Node Label object and set the position option instead, e.g:
    • t:
        {
          t: 'Label',
          position: 's'
        }
      

    Removing shapes from public API

    We've removed shape nodes from the public API and deprecated the related APIs:

    Instead of using shape nodes, we strongly recommend using rectangular combos and rectangular nodes. See also Breaking Changes for more information.

    Removing callbacks from async functions in KeyLines

    We've removed callbacks for asynchronous functions in KeyLines and removed the related API:

    • The KeyLines.promisify() function has been removed from the API and Typescript.

    Instead of using callbacks, we strongly recommend using promises. See also Breaking Changes for more information.

    November 2021: Retiring version 4.8 LTA

    We have deprecated KeyLines version 4.8 LTA, which means that from 1st November 2022 this version will no longer be available and support for this version will end.

    If you are using this version, we strongly recommend upgrading to the latest version so that you can make use of the full features of KeyLines.

    June 2020: Deprecating legacy APIs

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • The tidy option in chart.layout() has been deprecated and should not be used. Use the packing option instead.

    Events system deprecated

    We've implemented a new events system that better matches native DOM events. As a result, the old events system has been deprecated. Although you will be able to continue to use the chart.bind() events for the full lifecycle of KeyLines 6.x, we recommend you consider migrating to chart.on().

    April 2019: Deprecating legacy APIs

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • The element argument of KeyLines.create() has been replaced with the container argument to improve life cycle management.
    • KeyLines.setSize() is no longer necessary when specifying a container in KeyLines.create() and should not be used. See Resizing Components for more information.

    March 2019: Deprecating legacy APIs

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • The du property on nodes is deprecated and should not be used. To achieve an identical effect you can change node styles and bind to our drag events instead.

    12 November 2018: Deprecating legacy APIs

    We've deprecated a number of legacy APIs, so you should replace any that exist in your code.

    • KeyLines.dashedLineSupport() is no longer necessary and should not be called. By default, you can now use dashed line drawing in all our supported browsers.
    • KeyLines.charts() should not be used. Use KeyLines.components() instead.
    • KeyLines.createChart() should not be used. Use KeyLines.create() instead.
    • KeyLines.imageBasePath() and KeyLines.setCanvasPaths() should not be used. Use KeyLines.paths() to set image paths. KeyLines 5.0 and later doesn't require a specified assets path.
    • chart.chartType() always returns 'LinkChart' and should no longer be used.
    • chart.getLastError() should not be used. To handle errors trapped by other event handlers, bind to the error event instead.
    • chart.displayOptions() and chart.interactionOptions() should not be used. Use chart.options() instead.

    Figma Design Kit

    The Cambridge Intelligence Figma Design Kit is a powerful new tool to accelerate the design and build of beautiful, branded graph and timeline visualisations that seamlessly fit into your application UI. It aligns with our product feature sets and APIs, ensuring a faster and smoother Design-to-Development handover.

    To use the Figma Design Kit, download it, and then either drag the .fig file, or import it, into your Figma project(s).

    Request a trial (Required to Download)

    Long Term Availability (LTA)

    We always recommend upgrading to the latest release, as it always includes the latest features, enhancements and performance optimisations. Every release is stable and suitable for production use. We understand that you might not be able to do this right away, especially if it means upgrading to a new major version.

    If you’d prefer to continue using a previous major version, you can download a KeyLines Long Term Availability (LTA) release.

    Supported until 1 March 2026

    Supported until 1 October 2025

    With each major release we make an LTA release of the previous minor release available. We’ll provide at least 12 months notice in our deprecations before removing an older LTA version.

    LTA release support

    If you’re using an LTA release, you’ll get the same high level of support. We can't retrofit bug fixes in an LTA release, but if you find an issue, please report it to [email protected].