Jul 23, 2019

Rappid 3.0 is here

Rappid 3.0 is released and comes with updates, fixes, and great performance improvements.

"Our users requested support for ES6 modules and here we have it. We're excited our users can now use Rappid in modern build pipelines." says Roman Bruckner, CTO of client IO. "And that's not all! Huge performance gains with smart viewport matching and link-to-link connections make Rappid a truly powerful tool."

You can download the update package from your Account portal. If you're not eligible for a free update you can purchase it through our online store or request a free 30 day trial to try it out.

Take a look at the main highlights here and the full changelog below.

Rappid 3.0 Highlights:

Support for ES6 Modules

  • Import Rappid using ES6 modules syntax.
  • Use Rappid in modern build pipelines.
  • Import only modules/plugins that you need.

Performance Improvements

  • Smart viewport matching algorithm that renders only those shapes visible in the viewport.
  • Shapes outside the viewport are not rendered saving a huge amount of render time with large diagrams.
  • Viewport re-renders automatically when zooming and panning without the user noticing. See the Collapse/Expand demo: https://resources.jointjs.com/demos/collapsible.
  • Paper freeze/unfreeze allowing you to control when the paper should re-render.

Link-to-link Connections

  • Links can now be connected to other links.
  • Graph algorithms introduce new options to walk through the graph structure with link-to-link connections.
  • Check out our new demo on link-to-link connections at https://resources.jointjs.com/demos/bus.

Complete Rappid v3.0 Changelog:

  • add Collapsible application
  • upgrade dependencies (Backbone v1.4.0, Dagre v0.8.4, Graphlib v2.1.6, jQuery v3.4.1)
  • compatibility warnings (https://github.com/clientIO/joint/releases/tag/v3.0.0)
  • full support for ES Modules
  • support for Link to Link connections
  • ui.TreeLayoutView - add `validateConnection`, `reconnectElements`, `translateElements`, `paperConstructor` and `paperOptions` options
  • ui.PaperScroller - define `contentOptions` as a function
  • ui.PaperScroller - fix unnecessary scrollbars
  • ui.Stencil - define `search' option as a function
  • ui.Stencil - trigger `group:open` and `group:close` events
  • ui.SelectButtonGroup - add `singleDeselect` and `noSelectionValue` option
  • ui.Clipboard: fix copy&paste with localStorage
  • ui.Halo - support for connectionStrategy
  • ui.Halo - add `rotateEmbeds` options
  • ui.Inspector - fix content-editable sanitizing
  • format.Print - prevent other plugins from being printed
  • layout.ForceDirected - add `x`, `y` options, `graph` accepts an array of cells
  • layout.TreeLayout - add `getLayoutBBox()`
  • layout.TreeLayout - fix `BL`, `TL`, `BR`, `TR` layout link routes not taking element `margin` into account
  • dia.CommandManager - fix batch commands sorting
  • dia.Paper - async mode revamped (viewport matching, rendering progress) [breaking change]
  • dia.Paper - cells are rendered into the `paper.cells` (previously called `paper.viewport`), transformations are applied to `paper.layers` (parent of `paper.cells`) [breaking change]
  • dia.Paper - implement viewport matching (remove views from the DOM when not in the viewport) via `viewport` option and checkViewport()
  • dia.Paper - add freeze(), unfreeze(), isFrozen() and option `frozen` to stop/start views updates
  • dia.Paper - add requireView(), dumpViews(), updateViews() to force views to update
  • dia.Paper - add sorting options (none, approximate, exact)
  • dia.Paper - add `anchorNamespace`, `linkAnchorNamespace`, `connectionPointNamespace`, `defaultLinkAnchor` options
  • dia.Paper - add `useModelGeometry` for scaleContentToFit(), fitToContent(), getContentBBox(), getContentArea()
  • dia.Paper - add `contentArea` for scaleContentToFit(), fitToContent()
  • dia.Paper - fitToContent() returns area (g.Rect) of the content
  • dia.Graph - add `indirect` option for getNeighbors(), getConnectedLinks(), isNeighbor() for link-link connections
  • dia.Graph - getBBox() accepts no parameters and returns the bounding box of the entire graph [breaking change]
  • dia.Graph - getCellsBBox(cells) does not ignore links passed via `cells` parameter [breaking change]
  • dia.Link - add `priority` attribute for anchors
  • dia.Link - add getSourceCell(), getTargetCell(), getPolyline(), getSourcePoint(), getTargetPoint(), getBBox()
  • dia.Link - getSourceElement() and getTargetElement() finds also indirect elements
  • dia.Link - add angle, keepGradient and ensureLegibility options for labels
  • dia.ElementView - add findPortNode()
  • dia.LinkView - properly revert `pointer-events` attribute after a link interaction
  • dia.LinkView - add root node selector for string markup
  • dia.CellView - keep a dragged always view under the pointer (esp. when `restrictTranslate` in use)
  • dia.CellView - make sure `cell:mouseleave` and `cell:mouseenter` events are always called when the mouse leaves/enters a cell
  • dia.CellView - fix referenced bounding box for nodes outside the rotatable group
  • dia.CellView - listening for underlying model changes switched from a specific attribute change (e.g. `change:size`) to a general `change` event [breaking change]
  • dia.CellView - remove deprecated getStrokeBBox() [breaking change]
  • dia.Cell - add generateId(), generatePortId()
  • anchors - modelCenter anchor accepts `dx`, `dy` options
  • linkAnchors - add anchors for link-link connections (ratio, length, perpendicular, closest)
  • linkTools - add `stopPropagation` option for Vertices tool
  • shapes.bpmn - add `data-flow-type` and `data-icon-type` attributes
  • shapes.standard - add `standard.InscribedImage` shape
  • shapes.standard - fix `itemOverflow` change and highlighting for Record
  • shapes.basic - remove deprecated `PortsModelInterface` and `PortsViewInterface` [breaking change]
  • util - breakText() prefers breaking words at hyphens
  • util - nextFrame() extra parameters are appended to the arguments the callback receives
  • Vectorizer - change `xmlns` to `svg` namespace, add correct `xmlns` namespace [breaking change]
  • Vectorizer - fix translateAndAutoOrient() for edge cases
  • Geometry - add divideAt() and divideAtLength() for paths
  • Geometry - supports scientific notation for paths defined via SVGPath data
  • Geometry - add Line.prototype.angle(), Point.prototype.chooseClosest()
  • Geometry - add containsPoint() for Polyline, Path, Curve and Line
  • Geometry - fix Path.prototype.closestPoint() ending in an infinite loop
  • Geometry - add random()

We hope you you'll get the most from these new features, fixes and updates. Please don't hesitate to get in touch with questions or comments.

Happy diagramming!

- The Rappid Team