---
description: Version-5.0 - 2D graphics renderer for SVG, Canvas, WebGL and PDF contexts.
---

# Introduction to I2Djs

![Integrated 2D Js](https://content.gitbook.com/content/j4uz3UmYRheI1Pe6xix8/blobs/cuKURYl3LdcShzxAD5E3/i2djsLogo.png)

## **What is** I2Djs?

Integrated-2D is an Open source Javascript framework for rendering 2D graphics on SVG, Canvas, WebGL and PDF contexts. I2Djs provides many graphical functionalists that help in building rich interactive visual applications.

## Why I2Djs?

The goal of this framework is to provide the same programming interface to create and animate elements across different graphical rendering contexts by leveraging their underlying capabilities. Its declarative approach simplifies the learning curve of a developer. Developers can use I2D’s multi-layered contextual approach seamlessly for creating powerful composite visualization under a single roof.  Because of a single API, it's very easy to port visual application from one rendering context to another in a short period.

## **What does it provide?**

I2D’s declarative approach provides the same **API** syntax, and semantics, for all supported graphical contexts.

It provides methods for the creation, access, modification, and removal of nodes. Functionalities such as **Data Joins** (Join-Actions), **Animations** on attributes, styles, **Path Animation,** and **Morphing** are common across all the supported contexts.

**SVG:** For low scale better performance. I2Djs exposes full native SVG capabilities through its intuitive and easy to use APIs.  Full scale native event types are supported along with some additional interaction behaviours like **drag, zoom, Pan,** etc.

**Canvas:** I2Djs Canvas provides API's with simple syntax to create different geometrical elements. It has an internal pseudo-DOM implementation of all basic elements supported by SVG. It also provides pixel manipulation capabilities and also supports **events and behaviours** to create more interactive canvas visualizations.

**WebGL:** I2Djs WebGL also has a pseudo-DOM implementation of almost all elements supported by SVG. In addition, it provides a way to define the custom shaders and the way to feed the data to the attributes, uniforms, textures. Similar to SVG and Canvas, even webGL supports most of the Events and behaviours.

**PDF**: I2Djs pdfLayer provides great API interface to define and generate rich PDF documents. Its API syntax and semantics are in-line with other layer APIs. It also supports features like - pages, templates, reusable templates. It internally uses PDFKit for generating PDF.

## Performance

I2Djs implements various mechanisms to achieve efficient and scalable rendering of graphics. &#x20;

![](https://content.gitbook.com/content/j4uz3UmYRheI1Pe6xix8/blobs/raJm632ieFVygQpU8yLf/img.gif)

* **Reactivity:**
* **Same API:**
* **Virtual DOM**: I2Djs layer (all contexts) implements a mini Virtual DOM tree, which is a Javascript object representation of the corresponding DOM. All operations are performed on the VDOM and the same will be reflected in the actual DOM as part of the frame Refresh cycle. It helps in batching reads and writes.
* **Layering**: I2Djs multi contextual layering technique helps in gaining the performance by splitting the composite scene into multiple sub-scenes across different layer contexts.
* **Join-Actions**: I2Djs Join-Action mechanism helps in performing efficient high-scale data join with DOM and lets you define actions on them. It provides flexible handlers to manipulate data and to trigger corresponding actions without performing unnecessary join operations.

Performance Intensive Examples

[100000 particle distortion](https://i2djs.github.io/I2Djs/examples/webGL/distortion.html) animation — WebGL

[30000 particle distortion](https://i2djs.github.io/I2Djs/examples/canvas/distortion2.html) animation — Canvas

[5000 particle distortion](https://i2djs.github.io/I2Djs/examples/svg/distortion2.html) animation — SVG

## License

I2Djs is licensed under the **BSD 3-Clause "New" or "Revised" License.** Please refer to the below link for more details

{% embed url="https://github.com/I2Djs/I2Djs/blob/master/LICENSE" %}
