ApexGantt 3.20 to 3.22: Edits That Survive update(), Ignite UI and Localization
ApexGantt 3.20.0 shipped on November 5, 2026, 3.21.0 on November 8 and 3.22.0 on November 9. 3.20 changes several defaults, so check the table below, and take 3.22.0 for its tooltip escaping fix.
Key takeaways
update()keeps the edits made in the chart (3.20), and new getters read them back.- Bars move and resize from the keyboard (3.20).
- Only a Premium or higher key removes the watermark (3.20); see pricing.
- Ignite UI theming is an opt-in add-on, and a passed option beats the CSS variable (3.21).
- Locale packs, week start and fiscal year (3.22), with a draft Japanese pack.
- Task names in the default tooltips are escaped (3.22).
Which behaviours changed?
| Change | Release | What you will see | How to reverse it |
|---|---|---|---|
| Watermark needs a Premium key | 3.20 | A Pro key leaves the trial watermark | Use a Premium or higher key; call setLicense('') before stepping down to a lower plan (details) |
update() keeps edits | 3.20 | An options-only update() keeps drags and updateTask() changes | Pass series |
taskUpdate, taskUpdateSuccess and beforeTaskUpdate run on every edit path | 3.20 | Saving on both taskDragged and taskUpdateSuccess saves each drag twice | Save on taskUpdateSuccess, or filter by detail.source |
Any calendar object means Monday to Friday (except one holding only weekStart / fiscalYearStartMonth, 3.22) | 3.20 | Weekends are striped and not worked | workingWeekdays: [0, 1, 2, 3, 4, 5, 6] |
No height fills the container | 3.20 | A container's CSS height sizes the chart | height: 500 |
A passed option beats --apex-gantt-* | 3.21 | The option wins, even at its default value | Remove the option |
| Week cells follow the week start | 3.22 | With a de, fr, ru or en-gb dateLocale (or the ja pack), weeks start on Monday | calendar.weekStart: 0 |
inputDateFormat reads new tokens | 3.22 | Q, Do, k, w, W, X, x, L print values | Wrap literal text in [ ] |
Does update() keep my edits now?
Yes. Through 3.19, update() rebuilt the chart from its original series, discarding drags, updateTask() and link changes. From 3.20.0 it keeps the current tasks unless the call passes series or parsing, and passing series clears the undo history. Three getters read the chart back:
gantt.update({ pixelsPerDay: 20 }) // zooms; edits stay
const task = gantt.getTask('task-42') // a copy, or null for an unknown id
const saved = {
tasks: gantt.getTasks(), // tree order, collapsed and filtered rows included
links: gantt.getDependencies(), // [{ fromId, toId, type, lag }]
}
3.20 also adds expandTask() and collapseTask(), and keyboard editing: on a focused bar, ArrowLeft and ArrowRight move it one snap unit, and Shift plus an arrow resizes its end. See update, getTasks and keyboard editing.
What does 3.21 add?
The Ignite UI add-on: import 'apexgantt/ignite-ui', or apexgantt.ignite-ui.min.js by script tag, and the chart takes its colours, font and light or dark variant from the Ignite UI theme on the page. It needs no extra licence key.
An option you pass now beats --apex-gantt-* (see the table). theme also takes a registered theme's name, and PNG and PDF exports use the background the chart paints. See the family post and Using with Ignite UI.
How do I localize a gantt chart?
3.22.0 makes every remaining English string a message key (72 new ones), and function keys take templates such as 'Edit: {name}'. A locale pack sets a whole language under every other locale field:
import ApexGantt from 'apexgantt'
import { ja } from 'apexgantt/locales/ja'
const gantt = new ApexGantt(el, {
series: tasks,
locale: {
pack: ja, // messages, date names, header word order
displayDateFormat: 'YYYY-MM-DD', // explicit locale fields win over the pack
},
calendar: { weekStart: 0 }, // calendar.* also beats the pack (ja starts weeks on Monday)
})
gantt.render()
locale.tag sets the root's lang, plural rules and sort collation; locale.crosshairFormat and locale.timelineHeaderFormat format the crosshair and header. calendar.weekStart and calendar.fiscalYearStartMonth shape the header and on their own never turn working days on. The Japanese pack, about 2.8 KB gzipped in its own file, is a draft awaiting a native speaker's review. See Locale packs and Week start and fiscal year.
Is the tooltip fix a security update?
Yes. Up to 3.21.0 the default bar tooltip, the baseline tooltip and the edit dialog title wrote the task name into the page as HTML, so a name such as <img src=x onerror=...> ran script. 3.22.0 escapes it. Names without <, &, " or ' render as before. A custom tooltipTemplate must still escape task data itself; use the exported escapeHtml. If task names come from users or another system, upgrade to 3.22.0. See Escaping task data.
Which wrapper versions go with these?
- react-apexgantt, vue-apexgantt and ngx-apexgantt 1.3.0 accept registered theme names. vue-apexgantt needs apexgantt 3.21.0 or later, and its
themeprop no longer defaults to'light'. The 1.2.0 releases, for 3.20, sendupdate()only what changed. From ngx-apexgantt 1.2.0, core events stop at the chart: use the Outputs, because a listener on an ancestor element no longer hears them. - Blazor-ApexGantt 1.5.0 bundles 3.21.0 and adds
ApexGanttConfiguration.IgniteUIandGanttOptions.ThemeName,TokensandDesignSystem. It does not carry 3.22 yet. See Blazor Gantt chart.
The full lists are in the 3.20.0 and 3.22.0 GitHub releases; 3.21's changes are covered in Using with Ignite UI.
Upgrading
npm install apexgantt@3.22.0
apexgantt.min.js is about 8 KB gzipped larger than in 3.21.0. Then check:
- Your key is Premium or higher.
- React, Vue and Angular wrappers are at 1.2.0 or later, moved together with the core.
beforeTaskUpdatehandles every edit path and returnsfalsesynchronously.- Server echoes go through
updateTask(id, updates, { silent: true }). addDependency()now throws for self-links and cycles; callcanAddDependency()first.
Earlier ApexGantt posts: 3.19, 3.18 and 3.15.
Frequently asked questions
Do I need new React, Vue or Angular wrappers for ApexGantt 3.20?
Yes. Use react-apexgantt, vue-apexgantt or ngx-apexgantt 1.2.0 or later with 3.20: the 1.1.x React and Vue wrappers resend `series` on every prop change, which now clears undo history, and ngx 1.1.x fires each Output twice. vue-apexgantt 1.3.0 needs apexgantt 3.21.0 or later.
How do I save an ApexGantt chart after users edit it?
Save `getTasks()` and `getDependencies()` together. A task's own `dependency` field holds only the link it was loaded with, so links drawn or removed in the chart live only in `getDependencies()`. Listen to `taskUpdateSuccess` to know when to save; its `source` says which edit path committed the change.
Is the ApexGantt Japanese locale pack final?
No. It ships with `status: 'draft'` while the wording waits for a native speaker's review, and its strings may change in a minor release when that review is signed off. Override any key you need through `locale.messages`, which always wins over the pack.