Build A Production Gantt Project
This tutorial starts with any framework quick start and builds toward the same data flow used by the full showcase.
The application recipes below live in the examples source browser. Copy their recipes/ files beside your code before using the relative imports; they are maintained examples rather than published Gantt exports.
-
Add project hierarchy. Keep task rows flat and connect children with
parentId.grid.source = [{ id: 'delivery', name: 'Delivery', type: 'summary', startDate: '2026-07-14', duration: 8 },{ id: 'design', parentId: 'delivery', name: 'Design', startDate: '2026-07-14', duration: 3 },{ id: 'build', parentId: 'delivery', name: 'Build', startDate: '2026-07-17', duration: 5 },{ id: 'launch', name: 'Launch', type: 'milestone', startDate: '2026-07-24', duration: 0 },]; -
Add dependencies. Use stable task IDs and one of
FS,SS,FF, orSF.grid.ganttDependencies = [{ id: 'd1', predecessorTaskId: 'design', successorTaskId: 'build', type: 'FS', lagDays: 0 },{ id: 'd2', predecessorTaskId: 'build', successorTaskId: 'launch', type: 'FS', lagDays: 0 },]; -
Enable supported editing. The managed task columns route edits through Gantt scheduling and validation.
grid.gantt = {...grid.gantt,allowTaskCreate: true,taskCreateRow: true,contextMenu: {},};Inline cell editing, timeline drag/resize/progress handles, dependency drawing, the task editor, and the context menu all use the same project state. See Task Editing.
-
Assign resources. Resources and assignments are separate collections so multiple resources can work on one task.
grid.ganttResources = [{id: 'designer', name: 'Avery', role: 'Designer', calendarId: 'standard',allocationCapacity: 100, hourlyCost: 90,}];grid.ganttAssignments = [{id: 'a1', taskId: 'design', resourceId: 'designer',allocationUnits: 100, workHours: 24, responsibility: 'Visual design',}]; -
Show schedule analysis. Critical path and baseline overlays are opt-in visual layers.
grid.gantt = {...grid.gantt,visuals: {...grid.gantt?.visuals,showCriticalPath: true,showBaseline: true,baselineId: 'approved',},};grid.ganttBaselines = [{id: 'approved',name: 'Approved plan',capturedAt: '2026-07-14T00:00:00.000Z',tasks: [{ taskId: 'design', startDate: '2026-07-14', endDate: '2026-07-16', duration: 24, progressPercent: 0 },{ taskId: 'build', startDate: '2026-07-17', endDate: '2026-07-23', duration: 40, progressPercent: 0 },],}]; -
Persist complete project snapshots. Keep application state authoritative and replace grid collections after a successful save or server update.
import { exportProjectSnapshot, parseProjectSnapshotJson } from '@revolist/gantt';const json = exportProjectSnapshot(snapshot, { space: 2 });const restored = parseProjectSnapshotJson(json);if (restored.ok) applyProject(restored.project); -
Add reporting actions. Grid CSV/Excel export covers task-table data; the print recipe prepares a combined task-table/timeline report.
import { createPrintPdfExportRecipe } from './recipes/persistence-examples';const print = createPrintPdfExportRecipe({ target: document.querySelector('#gantt')!, document, window });print.exportProject(snapshot, { label: 'Delivery plan' });
Next, browse all Gantt examples, review configuration, or open the API reference.