Convert Figma logo to code with AI

DHTMLX logogantt

JavaScript Gantt Chart

1,818
361
1,818
6

Top Related Projects

5,968

Open Source Javascript Gantt

Gantt Gantt Gantt Timeline Schedule Calendar [ javascript gantt, js gantt, projects gantt, timeline, scheduler, gantt timeline, reservation timeline, react gantt, angular gantt, vue gantt, svelte gantt, booking manager ]

jQuery Gantt editor

🍞📅A JavaScript calendar that has everything you need.

Quick Overview

DHTMLX Gantt is a JavaScript library for creating interactive Gantt charts. It provides a powerful set of features for project management and scheduling, allowing developers to create visually appealing and functional Gantt charts for web applications.

Pros

  • Rich set of features including task management, resource allocation, and timeline customization
  • Highly customizable with extensive API and event system
  • Cross-browser compatibility and responsive design
  • Integration with popular frameworks like React, Angular, and Vue.js

Cons

  • Commercial license required for most use cases
  • Steep learning curve due to the extensive API and configuration options
  • Limited built-in themes and styling options
  • Performance may degrade with very large datasets

Code Examples

  1. Creating a basic Gantt chart:
gantt.init("gantt_container");
gantt.parse({
  data: [
    { id: 1, text: "Task 1", start_date: "2023-05-01", duration: 5 },
    { id: 2, text: "Task 2", start_date: "2023-05-06", duration: 3 }
  ]
});
  1. Adding custom columns to the Gantt chart:
gantt.config.columns = [
  { name: "text", label: "Task name", width: "*", tree: true },
  { name: "start_date", label: "Start time", align: "center" },
  { name: "duration", label: "Duration", align: "center" }
];
gantt.init("gantt_container");
  1. Enabling resource management:
gantt.config.resources = [
  { id: 1, name: "John Doe" },
  { id: 2, name: "Jane Smith" }
];
gantt.config.resource_assignment = "resource_id";
gantt.init("gantt_container");

Getting Started

  1. Include the DHTMLX Gantt library in your HTML file:
<script src="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.js"></script>
<link rel="stylesheet" href="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.css">
  1. Create a container for the Gantt chart:
<div id="gantt_container" style="width:100%; height:500px;"></div>
  1. Initialize the Gantt chart and add data:
gantt.init("gantt_container");
gantt.parse({
  data: [
    { id: 1, text: "Project kickoff", start_date: "2023-05-01", duration: 1 },
    { id: 2, text: "Design phase", start_date: "2023-05-02", duration: 5 }
  ]
});

This will create a basic Gantt chart with two tasks. You can further customize the chart by configuring various options and using the extensive API provided by DHTMLX Gantt.

Competitor Comparisons

5,968

Open Source Javascript Gantt

Pros of Gantt (frappe)

  • Lightweight and simple to use
  • Open-source with MIT license
  • Built with SVG, making it highly customizable

Cons of Gantt (frappe)

  • Limited features compared to DHTMLX Gantt
  • Less extensive documentation and community support
  • Fewer built-in integrations with other tools

Code Comparison

Gantt (frappe):

var tasks = [
  {
    id: 'Task 1',
    name: 'Redesign website',
    start: '2016-12-28',
    end: '2016-12-31',
    progress: 20,
    dependencies: 'Task 2, Task 3'
  },
  // ...
]
var gantt = new Gantt("#gantt", tasks);

DHTMLX Gantt:

gantt.init("gantt_here");
gantt.parse({
  data: [
    { id: 1, text: "Project #1", start_date: "01-04-2023", duration: 18 },
    { id: 2, text: "Task #1", start_date: "02-04-2023", duration: 8, parent: 1 },
    // ...
  ]
});

Both libraries offer easy initialization and task definition, but DHTMLX Gantt provides more advanced features and configuration options out of the box. Gantt (frappe) focuses on simplicity and ease of use, while DHTMLX Gantt offers a more comprehensive solution for complex project management needs.

Gantt Gantt Gantt Timeline Schedule Calendar [ javascript gantt, js gantt, projects gantt, timeline, scheduler, gantt timeline, reservation timeline, react gantt, angular gantt, vue gantt, svelte gantt, booking manager ]

Pros of gantt-schedule-timeline-calendar

  • More flexible and customizable, allowing for greater control over the appearance and behavior of the Gantt chart
  • Supports multiple views (timeline, calendar, resource) out of the box
  • Offers a more modern and responsive user interface

Cons of gantt-schedule-timeline-calendar

  • Less mature and potentially less stable compared to DHTMLX Gantt
  • Smaller community and fewer resources available for support and troubleshooting
  • May require more setup and configuration to achieve desired functionality

Code Comparison

gantt-schedule-timeline-calendar

import { GSTCResult } from 'gantt-schedule-timeline-calendar';
const gstc = GSTCResult({
  element: document.getElementById('gstc'),
  items: [...],
  columns: [...],
});

DHTMLX Gantt

gantt.init("gantt_here");
gantt.parse({
  data: [...],
  links: [...]
});

Both libraries offer straightforward initialization, but gantt-schedule-timeline-calendar provides a more modern, modular approach. DHTMLX Gantt has a simpler setup process, which may be preferable for quick implementations. The choice between the two depends on specific project requirements, desired customization level, and development team preferences.

jQuery Gantt editor

Pros of jQueryGantt

  • Open-source and free to use, making it accessible for all projects
  • Lightweight and easy to integrate into existing jQuery-based applications
  • Supports exporting to PDF and PNG formats

Cons of jQueryGantt

  • Less frequent updates and maintenance compared to gantt
  • Limited documentation and community support
  • Fewer built-in features and customization options

Code Comparison

gantt:

gantt.init("gantt_here");
gantt.parse({
  data: [
    { id: 1, text: "Task 1", start_date: "2023-05-01", duration: 5 },
    { id: 2, text: "Task 2", start_date: "2023-05-06", duration: 3 }
  ]
});

jQueryGantt:

$("#ganttChart").gantt({
  source: [
    { name: "Task 1", desc: "", values: [{ from: "/Date(1682899200000)/", to: "/Date(1683331200000)/", label: "Task 1", customClass: "ganttRed" }] },
    { name: "Task 2", desc: "", values: [{ from: "/Date(1683331200000)/", to: "/Date(1683590400000)/", label: "Task 2", customClass: "ganttBlue" }] }
  ]
});

Both libraries offer Gantt chart functionality, but gantt provides a more comprehensive and actively maintained solution with extensive documentation and features. jQueryGantt is a simpler, lightweight alternative that may be suitable for smaller projects or those already using jQuery.

🍞📅A JavaScript calendar that has everything you need.

Pros of tui.calendar

  • More versatile with multiple calendar views (daily, weekly, monthly)
  • Extensive theming and customization options
  • Better support for recurring events

Cons of tui.calendar

  • Steeper learning curve due to more complex API
  • Larger file size, potentially impacting load times
  • Less focus on Gantt-specific features

Code Comparison

tui.calendar:

import Calendar from '@toast-ui/calendar';

const calendar = new Calendar('#calendar', {
  defaultView: 'week',
  template: {
    time: function(schedule) {
      return moment(schedule.start.getTime()).format('HH:mm');
    }
  }
});

gantt:

gantt.init("gantt_here");
gantt.parse({
  data: [
    {id: 1, text: "Task #1", start_date: "2023-03-15", duration: 3, progress: 0.6},
    {id: 2, text: "Task #2", start_date: "2023-03-18", duration: 3, progress: 0.4}
  ]
});

tui.calendar offers more flexibility for various calendar views and customization, making it suitable for diverse scheduling needs. However, it may be overkill for projects primarily focused on Gantt charts. gantt provides a more straightforward API for Gantt-specific functionality, making it easier to implement and potentially more performant for Gantt-centric applications.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

DHTMLX Gantt - JavaScript Gantt Chart (Community Edition)

npm: v.10.0.0 · License: MIT · made by DHTMLX

Quick start | Build from source | Features | Community vs PRO | Frameworks | License | Links

dhtmlx-gantt is an open-source JavaScript Gantt chart library for visualizing and managing project schedules: a configurable task grid, a zoomable timeline, projects and milestones, four dependency link types, drag-and-drop scheduling, data export, and 32 built-in locales.

It is a framework-agnostic component that works with plain JavaScript and integrates with React, Angular, Vue, and Svelte.

DHTMLX Gantt - Community (MIT) Edition

This is the Community Edition of DHTMLX Gantt - distributed as the dhtmlx-gantt npm package under the MIT License and shipped as readable source code you can fork, modify, and rebuild. For advanced project management capabilities such as auto-scheduling, critical path, and resource management, see the PRO edition.


Quick start

Install the package, import the script and styles, and initialize the chart in a container element.

Install

npm install dhtmlx-gantt

Import

With a module bundler (Vite, webpack, Rollup, …):

import { gantt } from "dhtmlx-gantt";
import "dhtmlx-gantt/codebase/dhtmlxgantt.css";

The side-effect import also registers a global gantt, so plain <script> tags work against the bundled files in codebase/:

<script src="codebase/dhtmlxgantt.js"></script>
<link rel="stylesheet" href="codebase/dhtmlxgantt.css">

Add a container

<div id="gantt_here" style="width: 100%; height: 600px;"></div>

Initialize

gantt.config.date_format = "%Y-%m-%d";

gantt.init("gantt_here");

gantt.parse({
    data: [
        { id: 1, text: "Website redesign", type: "project",    progress: 0.4, open: true },
        { id: 2, text: "Research",         start_date: "2026-06-01", duration: 4, parent: 1, progress: 1 },
        { id: 3, text: "Wireframes",       start_date: "2026-06-05", duration: 6, parent: 1, progress: 0.6 },
        { id: 4, text: "Visual design",    start_date: "2026-06-11", duration: 8, parent: 1, progress: 0.2 },
        { id: 5, text: "Launch",           start_date: "2026-06-19", type: "milestone", parent: 1 }
    ],
    links: [
        { id: 1, source: 2, target: 3, type: "0" },  // finish-to-start
        { id: 2, source: 3, target: 4, type: "0" },
        { id: 3, source: 4, target: 5, type: "0" }
    ]
});

See a live demo · or run the bundled gallery with npm run start and open /samples/.


Build from source

Unlike a compiled-only distribution, the Community Edition ships its TypeScript/JavaScript sources and LESS styles, so you can read, change, and rebuild the library.

git clone https://github.com/DHTMLX/gantt.git
cd gantt
npm install

npm run build     # builds codebase/dhtmlxgantt.js (+ es module, css, d.ts)
npm run start     # dev mode: watch build + samples server at http://localhost:5173
npm run test      # builds, then loads every sample and fails on console errors
npm run lint      # eslint over src/

codebase/ is build output (generated, not committed). After npm run build you can serve the files from codebase/ directly via <script> tags, exactly like the npm package.

Repository layout

src/        library sources (TypeScript + JavaScript, LESS styles)
samples/    runnable demos (npm run start, then open /samples/)
scripts/    build, dev server, and test runner scripts
codebase/   build output (generated, not committed)

Testing

npm run test                 # smoke test: builds, then loads every sample
npm run test 05_lightbox     # smoke just one samples folder
npm run lint                 # eslint over src/

npm run test is a smoke pass: it loads every built sample headless and fails if any page throws or logs a console.error. It runs the build first; pass --no-build to skip it (e.g. in CI, where the build is a separate step).


Basic usage

Configuring the grid and time scale

// Configure grid columns
gantt.config.columns = [
    { name: "text",       label: "Task",  tree: true, width: 220 },
    { name: "start_date", label: "Start", align: "center", width: 90 },
    { name: "duration",   label: "Days",  align: "center", width: 60 },
    { name: "add",        label: "",      width: 44 }   // add-task button column
];

// Set the time scale unit and step
gantt.config.scale_unit = "week";
gantt.config.date_scale = "%M %d";

// Highlight weekends on the timeline
gantt.templates.scale_cell_class = function (date) {
    if (date.getDay() === 0 || date.getDay() === 6) return "weekend";
};

gantt.init("gantt_here");

Enabling plugins

Activate optional extensions before calling gantt.init():

gantt.plugins({
    tooltip:             true,   // hover tooltips on task bars
    quick_info:          true,   // touch-friendly task popup
    fullscreen:          true,   // fullscreen toggle
    keyboard_navigation: true,   // arrow-key navigation
    drag_timeline:       true,   // drag to scroll the timeline
    click_drag:          true    // draw new tasks by dragging on the timeline
});

gantt.init("gantt_here");

Multiple chart instances

Render several independent Gantt charts on one page with the Gantt factory:

import { Gantt } from "dhtmlx-gantt";

var chartA = Gantt.getGanttInstance();
var chartB = Gantt.getGanttInstance();

chartA.init("gantt_a");
chartB.init("gantt_b");

The default gantt export is itself an instance created this way, so existing single-chart code keeps working unchanged.

Reacting to changes

gantt.attachEvent("onAfterTaskUpdate", function (id, task) {
    fetch("/api/tasks/" + id, {
        method: "PUT",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(task)
    });
});

gantt.attachEvent("onAfterLinkAdd", function (id, link) {
    fetch("/api/links", {
        method: "POST",
        body: JSON.stringify(link)
    });
});

For two-way sync with a REST backend, use the bundled dataProcessor - see Backend integration.


Features

The Community Edition covers the everyday Gantt feature set, including projects (summary tasks) and milestones:

  • Task grid - any number of configurable columns, a tree column, and inline cell editing
  • Projects / summary tasks and milestones - task types with type-aware rendering and lightbox
  • Zoomable time scale - single or dual scale; configurable unit (hour … year) and step
  • Four dependency types - finish-to-start, start-to-start, finish-to-finish, start-to-finish, with lag and drag-to-create links
  • Drag-and-drop scheduling - move task bars to reschedule; resize bars to change duration
  • Progress indicators - completion shown as a filled bar segment, editable in the lightbox
  • Lightbox task editor - configurable modal dialog; add your own controls
  • Smart rendering - only visible rows/columns are drawn, for large datasets
  • Multiple chart instances - render several independent Gantts on one page via the Gantt factory
  • Templates - override any rendered element (bars, grid cells, scale cells, tooltips)
  • Plugins - tooltips, quick info, keyboard navigation, fullscreen, drag-timeline, click-drag
  • Grid column resizing and a column-configuration API
  • Data loading/saving - JSON/XML parsing and serialization, REST dataProcessor
  • Export - to PDF, PNG, Excel, iCal, and MS Project via the DHTMLX online export service
  • Skins - Material, Terrace, Meadow, Broadway, Skyblue, and more
  • 32 locales, WAI-ARIA accessibility, touch support, CSP-compliant mode
  • Event system - 100+ events covering interactions and lifecycle hooks
  • TypeScript - bundled type definitions

Note: codebase/dhtmlxgantt.d.ts describes the full product API, so it lists some PRO-only methods that are not present in this edition.


Community vs PRO

This edition is intended for schedule visualization and manual editing. Production project-management features - auto-scheduling, critical path, resource planning - are part of the commercial PRO edition.

FeatureCommunity (MIT)PRO
Task grid, columns, tree, inline editing✓✓
Zoomable single/dual time scale✓✓
Projects / summary tasks, milestones✓✓
Four dependency types (FS/SS/FF/SF) + lag✓✓
Drag-and-drop scheduling & bar resize✓✓
Progress, lightbox editor, templates✓✓
Smart rendering for large datasets✓✓
Multiple chart instances per page✓✓
Tooltips, quick info, keyboard nav, fullscreen✓✓
Drag-timeline, click-drag, grid column resize✓✓
Skins, 32 locales, accessibility, touch✓✓
JSON/XML loading, REST dataProcessor✓✓
Export to PDF/PNG/Excel/iCal/MS Project✓✓
Auto-scheduling✗✓
Critical path & slack✗✓
Resource management (assignments, histogram, grouping by resource)✗✓
Baselines & deadlines✗✓
Constraints✗✓
Split tasks & rollups✗✓
WBS codes✗✓
Grouping✗✓
Dynamic (on-demand) loading✗✓
Undo / redo✗✓
Multi-task selection & drag✗✓
Timeline markers / today line✗✓
Unscheduled tasks & new-task placeholder✗✓
Working-time calendars (setWorkTime, custom work calendars)✗✓

Need advanced project management features?

The DHTMLX Gantt PRO edition adds auto-scheduling, critical path calculation, resource management (assignments, histograms, and grouping by resource), working-time calendars, baselines and deadlines, constraints, split tasks, WBS, and dynamic data loading - capabilities designed for production project-management applications.


Framework integration

DHTMLX Gantt works with popular front-end frameworks. The PRO edition provides ready-made components (ReactGantt, VueGantt, AngularGantt); the Community Edition integrates via the standard wrapper patterns documented below.

Backend integration

The bundled dataProcessor provides two-way data sync between the chart and a REST API:


License

This Community Edition of DHTMLX Gantt is licensed under the MIT License - see LICENSE.md.

You are free to use, copy, modify, merge, publish, distribute, sublicense, and sell copies of this software in any project, including closed-source and commercial applications, subject only to the MIT License terms. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Copyright © 2026 XB Software Ltd.


Documentation and resources

The full product documentation applies to this edition within the feature scope above.

AI-assisted development

Building with an AI coding assistant (Claude Code, Cursor, Codex…)? Two free helpers cover the dhtmlx-gantt package:

  • DHTMLX MCP Server - connects your assistant to up-to-date DHTMLX documentation and API reference.
  • Agent Skills - teach the assistant correct integration patterns and known pitfalls.

Useful links

If this project helps you, please ⭐ the GitHub repository.

NPM DownloadsLast 30 Days