What's New in ApexGantt 3.15.0
ApexGantt 3.15.0 shipped on July 7, 2026, closing a run from 3.13 that turned the task list into a data grid and added split tasks, saved view state, draw-to-create, export and touch support. Nothing was removed or renamed, but two defaults changed, so check the table below before you upgrade.
Key takeaways
- The task list is a data grid: sort, filter, group by a field, and resize, reorder or auto-size columns.
- Split tasks: one row, several worked segments separated by gaps.
- Save and restore the view with
getState()/setState()orpersistState; see saving and restoring state. - Draw tasks on the timeline with
enableDrawTask, and export to SVG, PNG or PDF. - Touch and pen now drive every bar gesture (drag, resize, progress, dependency-draw), with no API change.
- New in 3.15.0:
scrollToTaskOnRowClickscrolls a task's bar into view when its row is clicked.
Which defaults changed?
| Default change | Release | What you will see | How to reverse it |
|---|---|---|---|
autoSizeColumns is true | 3.13.0 | Columns size to their content and the task panel grows so nothing clips | autoSizeColumns: false |
enableScrollButtons is false | 3.15.0 | The edge chevrons 3.14 added no longer appear on rows whose bar is off screen | enableScrollButtons: true |
gantt.scrollToTask(id) works whatever enableScrollButtons is set to, so code that scrolls programmatically needs no change.
The task list is a data grid
The left panel now sorts, filters, groups and reshapes. Sorting preserves the hierarchy: siblings reorder within their parent and the tree is never flattened. Filtering offers a quick search box and an advanced builder that combines rules with All or Any; both are view-only and keep a match's ancestors visible. Grouping buckets tasks under collapsible headers. Six built-in columns are new: Predecessors, Successors, Assignees, BaselineStart, BaselineEnd and BaselineVariance.
const gantt = new ApexGantt(el, {
series: tasks,
sortBy: { key: ColumnKey.Name, direction: 'asc' },
enableQuickFilter: true,
enableFilterBuilder: true,
filterRules: { match: 'all', rules: [{ field: ColumnKey.Progress, operator: 'lt', value: 100 }] },
});
gantt.groupBy(ColumnKey.Progress);
gantt.setColumnWidth(ColumnKey.Name, 260);
In the demo, click a header to sort, drag a column edge to resize it or a header to reorder, and click a row to scroll to its bar.
Try it: click a column header to sort (Shift-click adds a second key), drag a column's right edge to resize or drag a header to reorder, and click any row to scroll its bar into view. The Build task is split into two worked segments.
Sorting and filtering lists the operators and the sortChange and filterChange events.
Split tasks
A task can hold several worked segments separated by gaps on one row: work Monday to Wednesday, pause, resume Friday. Its start and end are derived from the segments, so summary rollups, dependencies and the Duration column keep working, and dragging moves every segment together. The Build task in the demo above is split.
const gantt = new ApexGantt(el, {
series: [{
id: 't1',
name: 'Build',
segments: [
{ startTime: '2026-06-01', endTime: '2026-06-04' },
{ startTime: '2026-06-08', endTime: '2026-06-12' },
],
}],
});
gantt.splitTask('t1', '2026-06-08', { resumeAt: '2026-06-12' }); // or split at runtime
The split tasks guide covers the full API.
Click a row to scroll to its bar
New in 3.15.0, scrollToTaskOnRowClick: true scrolls a task's bar into view when its task-list row is clicked, as gantt.scrollToTask(id) does. With selection on, one click selects the row and reveals the bar. It is off by default; the demo above turns it on.
new ApexGantt(el, { series: tasks, scrollToTaskOnRowClick: true });
See scrollToTaskOnRowClick in the options reference.
Other fixes
- A custom
columnConfigcolumn with anaccessorand norendershows its value on first paint, not after the first interaction (3.15.0). - With the "+ Add task" row on, the empty filler rows in the two panes line up again, so hover and striping match (3.15.0).
- The bundled TypeScript declarations now cover the whole grid API and no longer import the unpublished
@apex/commons(3.14.1).
The full lists are in the 3.14.0, 3.14.1 and 3.15.0 GitHub releases.
Upgrading
npm install apexgantt@latest
Or bump the pinned version on your CDN link. Check the two default changes; everything else is additive. Installation and usage covers setup, and the product page has live examples.
ApexGantt is included in the Premium plan and above and has no free tier: the Community License, free under $2M in annual revenue, budget or funding, does not cover it. Without a licence key the chart renders with a trial watermark for evaluation. See pricing and the licence.
Frequently asked questions
Will upgrading to ApexGantt 3.15.0 change how my chart looks?
Possibly, in two places. Task-list columns now fit their content, so the panel can grow wider than `tasksContainerWidth`; `autoSizeColumns: false` restores the fixed split. The chevrons that jump to an off-screen bar stay hidden unless you set `enableScrollButtons: true`. No option or method was removed or renamed.
Does sorting the ApexGantt task list flatten the hierarchy?
No. Sorting reorders siblings inside each parent, and summary rows sort by their rolled-up span. Grouping is the one view that sets the tree aside: while it is active every task sits flat under its group header, and `clearGrouping()` brings back the exact hierarchy you had.
Why does TypeScript say a property does not exist on ApexGantt?
On 3.13.0 and 3.14.0 the bundled `apexgantt.d.ts` lagged the runtime, so the sorting, filtering, grouping, column, split, state and export members had no types, and the file imported the unpublished `@apex/commons`. Upgrade to 3.14.1 or later. JavaScript code was never affected.
How do I turn a split ApexGantt task back into one bar?
Call `gantt.updateTask(id, { segments: [] })`. Splitting at runtime takes the same path: `gantt.splitTask(id, at, { resumeAt })` is validated, undoable and emits `taskUpdate`, and `gantt.isSplit(id)` tells you whether a task currently has segments.