Hi all,

I’m evaluating dhtmlGantt. Is there the possibility to show “milestones”, usually represented like 1-day-lenght diamonds?
Example (September 15, 2011):



Not yet, but we will add them.

Cool! Any ETA on that?



It’s really easy to do, one day would be enough. I could add it for you to the old version, because not sure when we will release a new one.


Did you add the milestone functionality, because I would like to use this feature also?



I have opened a ticket to ask this question. Does it shows a milestone as a diamond on the current version of Gantt Chart?

Thank you,


The current version of dhtmlxGantt doesn’t actually support milestones, unfortunately. I agree that it wouldn’t be too difficult to modify the source code to add support for milestones (having heavily modified dhtmlxGantt ourselves to meet our own project needs), but if that’s not something you’d like to do there’s not really much you can do.

Thank you, SpinFusion.

It is a little bit strange not having it. It seems to me that is simple considering that the suite is capable of doing many things more complex than this and the fact that a DHTMLX member said that too.

Well, should we beg for that? lol.

Hi all

Any news on this? We are desperately looking for milestones… would be great!


Nearly here.
If all goes fine, tomorrow we will publish beta version of gantt that supports projects and milestones.

Hi Stanislav,

did you finish the beta version with support of milestones? Where do I find the download?


the beta is ready, we’ll anounce it in a while.
Check the attached package and the related example:

the main changes in configuration are:

  • task can have type specified (task.type property). All predefined types are stored in gantt.config.types object (‘task’, ‘project’, ‘milestone’). Custom type can be added as well. Empty value of task.type is considered as ‘task’ type;

  • each type can have separate configuration of the details form(lightbox). All configurations are stored in gantt.config.lightbox object (e.g. gantt.config.lightbox.milestone_sections, gantt.config.lightbox.project_sections). Details form for the custom type can be added as

gantt.config.lightbox['typeName_sections' ] = [...];
  • new control for the details form, that allows changing the task type and refreshing the details form. It loads options from gantt.config.types and has a default onchange handler, everything else is identical to a ‘select’ controlgantt.config.lightbox.sections = [ ..., {name: "type", type: "typeselect", map_to: "type"} ];

Programmatically, milestones are handled as a regular tasks. I.e. they triggers the same events and templates.
Excluding the appearance, the main difference from a regular task - duration and end_date of the milestone is ignored. Even if you specify duration or end_date in milestone’s data object, it will be cleared during parsing.
The text label for milestone has to be defined with gantt.templates.rightside_text or gantt.templates.leftside_text (not defined by default), .templates.task_text is not displayed.

One another predefined type of the task is ‘project’. Project is a task that starts at the same time when starts it’s earliest child task, and end when the latest child ends. The value of start_date, end_date or duration of such tasks is ignored. They also can’t be dragged or resized. (425 KB)

The 2.1 beta has the same bug that 2.0 has.

If you have nested project types -

  • Type project in 2.1
  • No duration and start date part in 2.0

Have multiple of these nested.

Using the OnBeforeTaskDisplay event to do filtering, when hiding either the inner or the outer type, and children that are needed to calculate the end dates of a “project”. This causes a error. Where the date being passed into is undefined.

Basically filtering and projects are really unreliable. If I tried to filter out closed tasks, it would cry if I hide parents which I am making projects. So if gantt.hasChild( is true, and I hide it, it breaks, unless it is at the highest level.

Sorry I can’t give better reproduction steps. Trying mixing filtering into multiple project/milestones mixed into a series of tasks. Filter out a combination of project/milestones/tasks without removing all of a type. Task.progress would be a good attribute to test against.

If I just overload data with dummy data because i don’t want to display it anyways -

var date = date || new Date();

Then the element is undefined in gantt.showTask (~ #3835). This returns nothing.

var el = this.getTaskNode(id);

From Chrome Console. I tried to backtrace this further, but think its a logic issue by not handling projects if we are not showing children that are needed to calculate the project.

Uncaught TypeError: Cannot call method 'valueOf' of undefined dhtmlxgantt.js?1389905264:6618 dhtmlxgantt.js?1389905264:6618
gantt._scale_helpers.formatScales dhtmlxgantt.js?1389905264:2106
gantt._scale_helpers.prepareConfigs dhtmlxgantt.js?1389905264:2013
gantt._render_tasks_scales dhtmlxgantt.js?1389905264:3325
gantt.render dhtmlxgantt.js?1389905264:6325
obj._eventCatcher.z dhtmlxgantt.js?1389905264:1252
obj.callEvent dhtmlxgantt.js?1389905264:1240
gantt.on_load dhtmlxgantt.js?1389905264:3921
gantt.parse dhtmlxgantt.js?1389905264:3868
(anonymous function) tasks:1041
v.Callbacks.l jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?1388420674:2
v.Callbacks.c.fireWith jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?1388420674:2
v.extend.ready jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js?1388420674:2