Skip to content

Gantt Overview

RevoGrid Gantt is an Enterprise plugin layered on top of the base grid. RevoGrid owns rendering, virtualization, editing, and keyboard interactions. Gantt adds task timeline projection, dependency links, scheduling rules, resources/assignments, critical path, baselines, and timeline tools.

Source code
TypeScript ts
import { defineCustomElements } from '@revolist/revogrid/loader';
defineCustomElements();

import {
  defineGanttToolbar,
  GanttPlugin,
} from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import './gantt-task-editor-form.css';
import {
  SHOWCASE_ASSIGNMENTS,
  SHOWCASE_DEPENDENCIES,
  SHOWCASE_RESOURCES,
  SHOWCASE_TOOLBAR_COLUMNS,
  STANDARD_CALENDAR,
} from './gantt-project-data';
import {
  createInitialTaskSource,
  TASK_EDITOR_COLUMNS,
  TASK_EDITOR_DIALOG_CONFIG,
  TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';

const { isDark } = currentTheme();

type TaskEditorGridElement = HTMLRevoGridElement & Record<string, any>;

function createElement<K extends keyof HTMLElementTagNameMap>(
  tagName: K,
  className?: string,
): HTMLElementTagNameMap[K] {
  const element = document.createElement(tagName);
  if (className) {
    element.className = className;
  }
  return element;
}

export function load(parentSelector: string | Element) {
  const parent = typeof parentSelector === 'string'
    ? document.querySelector(parentSelector)
    : parentSelector;
  if (!parent) {
    return () => {};
  }

  const taskSource = createInitialTaskSource();

  const root = createElement('section', 'gantt-task-editor-demo');
  const toolbar = createElement('div', 'gantt-task-editor-toolbar');
  const grid = document.createElement('revo-grid') as TaskEditorGridElement;

  grid.className = 'gantt-task-editor-grid';
  grid.theme = isDark() ? 'darkCompact' : 'compact';
  grid.hideAttribution = true;
  grid.plugins = [GanttPlugin as any];
  grid.columns = TASK_EDITOR_COLUMNS;
  grid.gantt = TASK_EDITOR_GANTT_CONFIG;
  grid.ganttCalendars = [STANDARD_CALENDAR];
  grid.ganttDependencies = SHOWCASE_DEPENDENCIES;
  grid.ganttResources = SHOWCASE_RESOURCES;
  grid.ganttAssignments = SHOWCASE_ASSIGNMENTS;
  grid.ganttTaskEditorDialog = TASK_EDITOR_DIALOG_CONFIG;

  root.appendChild(toolbar);
  root.appendChild(grid);
  parent.appendChild(root);
  defineGanttToolbar(toolbar, {
    grid,
    columns: SHOWCASE_TOOLBAR_COLUMNS,
    controls: {
      export: false,
      baseline: false,
    },
  });

  grid.source = taskSource;

  return () => {
    root.remove();
  };
}
React tsx
import React, { useEffect, useMemo, useRef } from 'react';
import { RevoGrid } from '@revolist/react-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import {
  SHOWCASE_ASSIGNMENTS,
  SHOWCASE_DEPENDENCIES,
  SHOWCASE_RESOURCES,
  SHOWCASE_TOOLBAR_COLUMNS,
  STANDARD_CALENDAR,
} from './gantt-project-data';
import {
  createInitialTaskSource,
  TASK_EDITOR_COLUMNS,
  TASK_EDITOR_DIALOG_CONFIG,
  TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
import './gantt-task-editor-form.css';

const { isDark } = currentTheme();

export default function GanttTaskEditorForm() {
  const gridRef = useRef<HTMLRevoGridElement>(null);
  const toolbarRef = useRef<HTMLDivElement>(null);

  const source = useMemo(() => createInitialTaskSource(), []);
  const plugins = useMemo(() => [GanttPlugin], []);
  const columns = useMemo(() => TASK_EDITOR_COLUMNS, []);
  const gantt = useMemo(() => TASK_EDITOR_GANTT_CONFIG, []);
  const calendars = useMemo(() => [STANDARD_CALENDAR], []);
  const dependencies = useMemo(() => SHOWCASE_DEPENDENCIES, []);
  const resources = useMemo(() => SHOWCASE_RESOURCES, []);
  const assignments = useMemo(() => SHOWCASE_ASSIGNMENTS, []);
  const taskEditorDialog = useMemo(() => TASK_EDITOR_DIALOG_CONFIG, []);

  useEffect(() => {
    const toolbar = toolbarRef.current;
    const grid = gridRef.current;
    if (!toolbar || !grid) {
      return undefined;
    }

    defineGanttToolbar(toolbar, {
      grid,
      columns: SHOWCASE_TOOLBAR_COLUMNS,
      controls: {
        export: false,
        baseline: false,
      },
    });

    return () => {
      toolbar.textContent = '';
    };
  }, []);

  return (
    <section className="gantt-task-editor-demo">
      <div ref={toolbarRef} className="gantt-task-editor-toolbar" />
      <RevoGrid
        ref={gridRef}
        className="gantt-task-editor-grid"
        theme={isDark() ? 'darkCompact' : 'compact'}
        hideAttribution
        plugins={plugins}
        source={source}
        columns={columns}
        gantt={gantt}
        ganttCalendars={calendars}
        ganttDependencies={dependencies}
        ganttResources={resources}
        ganttAssignments={assignments}
        ganttTaskEditorDialog={taskEditorDialog}
      />
    </section>
  );
}
Vue vue
<template>
  <section class="gantt-task-editor-demo">
    <div ref="toolbarRef" class="gantt-task-editor-toolbar"></div>
    <RevoGrid
      ref="gridRef"
      class="gantt-task-editor-grid"
      hide-attribution
      :theme="isDark ? 'darkCompact' : 'compact'"
      :plugins="plugins"
      :source="tasks"
      :columns="columns"
      :gantt.prop="ganttConfig"
      :gantt-calendars.prop="calendars"
      :gantt-dependencies.prop="dependencies"
      :gantt-resources.prop="resources"
      :gantt-assignments.prop="assignments"
      :gantt-task-editor-dialog.prop="taskEditorDialog"
    />
  </section>
</template>

<script setup lang="ts">
import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';
import RevoGrid from '@revolist/vue3-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentThemeVue } from '../composables/useRandomData';
import {
  SHOWCASE_ASSIGNMENTS,
  SHOWCASE_DEPENDENCIES,
  SHOWCASE_RESOURCES,
  SHOWCASE_TOOLBAR_COLUMNS,
  STANDARD_CALENDAR,
} from './gantt-project-data';
import {
  createInitialTaskSource,
  TASK_EDITOR_COLUMNS,
  TASK_EDITOR_DIALOG_CONFIG,
  TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';
import './gantt-task-editor-form.css';

const { isDark } = currentThemeVue();

const plugins = ref([GanttPlugin]);
const columns = ref(TASK_EDITOR_COLUMNS);
const tasks = ref(createInitialTaskSource());
const ganttConfig = ref(TASK_EDITOR_GANTT_CONFIG);
const calendars = ref([STANDARD_CALENDAR]);
const dependencies = ref(SHOWCASE_DEPENDENCIES);
const resources = ref(SHOWCASE_RESOURCES);
const assignments = ref(SHOWCASE_ASSIGNMENTS);
const taskEditorDialog = ref(TASK_EDITOR_DIALOG_CONFIG);

const gridRef = ref<InstanceType<typeof RevoGrid> | HTMLRevoGridElement | null>(null);
const toolbarRef = ref<HTMLElement | null>(null);
let toolbarMounted = false;
let toolbarFrame = 0;

function getGridEl(): HTMLRevoGridElement | null {
  const refValue = gridRef.value as (InstanceType<typeof RevoGrid> & { $el?: HTMLRevoGridElement }) | HTMLRevoGridElement | null;
  const candidate = (refValue && '$el' in refValue ? refValue.$el : refValue) ?? null;
  return candidate instanceof HTMLElement && candidate.tagName.toLowerCase() === 'revo-grid'
    ? candidate as HTMLRevoGridElement
    : null;
}

function mountToolbar() {
  if (toolbarMounted) {
    return;
  }

  const grid = getGridEl();
  if (!toolbarRef.value || !grid) {
    toolbarFrame = requestAnimationFrame(mountToolbar);
    return;
  }

  toolbarMounted = true;
  defineGanttToolbar(toolbarRef.value, {
    grid,
    columns: SHOWCASE_TOOLBAR_COLUMNS,
    controls: {
      export: false,
      baseline: false,
    },
  });
}

onMounted(async () => {
  await nextTick();
  mountToolbar();
});

onBeforeUnmount(() => {
  if (toolbarFrame) {
    cancelAnimationFrame(toolbarFrame);
  }
  if (toolbarRef.value) {
    toolbarRef.value.textContent = '';
  }
});
</script>
Angular ts
import { AfterViewInit, Component, ElementRef, NO_ERRORS_SCHEMA, ViewChild, ViewEncapsulation } from '@angular/core';
import { RevoGrid } from '@revolist/angular-datagrid';
import { defineGanttToolbar, GanttPlugin } from '@revolist/revogrid-enterprise';
import { currentTheme } from '../composables/useRandomData';
import {
  SHOWCASE_ASSIGNMENTS,
  SHOWCASE_DEPENDENCIES,
  SHOWCASE_RESOURCES,
  SHOWCASE_TOOLBAR_COLUMNS,
  STANDARD_CALENDAR,
} from './gantt-project-data';
import {
  createInitialTaskSource,
  TASK_EDITOR_COLUMNS,
  TASK_EDITOR_DIALOG_CONFIG,
  TASK_EDITOR_GANTT_CONFIG,
} from './GanttTaskEditorFormShared';

@Component({
  selector: 'gantt-task-editor-form-grid',
  standalone: true,
  // Allows Angular demos to bind RevoGrid plugin props that are not wrapper inputs.
  schemas: [NO_ERRORS_SCHEMA],
  imports: [RevoGrid],
  template: `
    <section class="gantt-task-editor-demo">
      <div #toolbar class="gantt-task-editor-toolbar"></div>
      <revo-grid
        #grid
        class="gantt-task-editor-grid"
        [theme]="theme"
        [hideAttribution]="true"
        [plugins]="plugins"
        [source]="tasks"
        [columns]="columns"
        [gantt]="ganttConfig"
        [ganttCalendars]="calendars"
        [ganttDependencies]="dependencies"
        [ganttResources]="resources"
        [ganttAssignments]="assignments"
        [ganttTaskEditorDialog]="taskEditorDialog"
      ></revo-grid>
    </section>
  `,
  styleUrls: ['./gantt-task-editor-form.css'],
  encapsulation: ViewEncapsulation.None,
})
export class GanttTaskEditorFormGridComponent implements AfterViewInit {
  @ViewChild('grid', { read: ElementRef }) gridRef!: ElementRef<HTMLRevoGridElement>;
  @ViewChild('toolbar', { read: ElementRef }) toolbarRef!: ElementRef<HTMLElement>;

  theme = currentTheme().isDark() ? 'darkCompact' : 'compact';
  plugins = [GanttPlugin];
  columns = TASK_EDITOR_COLUMNS;
  tasks = createInitialTaskSource();
  ganttConfig = TASK_EDITOR_GANTT_CONFIG;
  calendars = [STANDARD_CALENDAR];
  dependencies = SHOWCASE_DEPENDENCIES;
  resources = SHOWCASE_RESOURCES;
  assignments = SHOWCASE_ASSIGNMENTS;
  taskEditorDialog = TASK_EDITOR_DIALOG_CONFIG;

  ngAfterViewInit(): void {
    defineGanttToolbar(this.toolbarRef.nativeElement, {
      grid: this.gridRef.nativeElement,
      columns: SHOWCASE_TOOLBAR_COLUMNS,
      controls: {
        export: false,
        baseline: false,
      },
    });
  }
}
Project Data ts
/**
 * Shared project data for all Gantt documentation examples.
 *
 * This file is kept as the public import surface for existing demos. The
 * actual constants are grouped by responsibility in the adjacent modules.
 */
export * from './gantt-project-base-data';
export * from './gantt-showcase-data';
export * from './gantt-showcase-columns';

This document crossmatches the desired Scheduler, Gantt, and shared planning-platform feature list against the current implementation in packages/enterprise/plugins/gantt.

Status:

  • Existing βœ… - implemented now.
  • Partial β˜‘οΈ - foundation exists, but product/API/UX work is still needed.
  • Planned 🚧 - roadmap item.

Gantt

Project planning with task hierarchy, dependencies, milestones, baselines, calendars, resources, and scheduling logic.

Feature groupFeatureStatusNotes
Task modelTask tree / work breakdown structureβœ…Tasks use parentId and wbsCode.
Task modelSummary tasksβœ…Summary task type and parent rollups exist.
Task modelRegular tasksβœ…Standard task type exists.
Task modelMilestonesβœ…Milestone task type exists.
Task modelCollapsible task groupsβœ…Tree plugin integration exists.
Task modelParent-child rollupsβœ…Schedule and cost rollups exist.
DependenciesFinish-to-Startβœ…Supported dependency type.
DependenciesStart-to-Startβœ…Supported dependency type.
DependenciesFinish-to-Finishβœ…Supported dependency type.
DependenciesStart-to-Finishβœ…Supported dependency type.
DependenciesLead and lag timeβœ…Positive lag and negative lead are supported.
DependenciesDependency validationβœ…Validation and diagnostics exist.
DependenciesMove task dependenciesβœ…Dependency drag/link editing exists.
DependenciesHide dependency arrowsβœ…gantt.visuals.showDependencies = false hides dependency overlays without mutating ganttDependencies.
SchedulingAuto-schedulingβœ…Dependency-aware recalculation exists.
SchedulingManual schedulingβœ…Manual tasks preserve authored dates and can warn.
SchedulingForward schedulingβœ…Project-start scheduling exists.
SchedulingBackward schedulingβœ…Project-finish scheduling exists.
SchedulingTask constraintsβœ…Start/finish no-earlier/no-later and must-start/must-finish constraints exist.
SchedulingDeadline markersβœ…Deadline fields and indicators exist.
SchedulingDuration calculationβœ…Calendar-aware duration logic exists.
SchedulingStart / finish date calculationβœ…Engine computes effective dates.
SchedulingTask splittingβœ…Split ranges affect date math and rendering.
Critical pathCritical pathβœ…Critical path calculation and highlighting exist.
Critical pathTotal slackβœ…totalSlackDays is projected.
Critical pathFree slack🚧Separate free-slack field is not implemented.
BaselinesBaselinesβœ…Baseline snapshots and baseline bars exist.
BaselinesBaseline varianceβœ…Start, finish, duration, and progress variance fields exist.
ProgressPercent completeβœ…Progress field and editing exist.
ProgressProgress trackingβœ…Actual dates, remaining duration, and progress-aware scheduling exist.
CalendarsProject calendarβœ…Primary project calendar exists.
CalendarsTask calendarβœ…Tasks reference calendars.
CalendarsResource calendarβœ…Resources reference calendars.
CalendarsWorking / non-working daysβœ…Calendar working weekdays exist.
CalendarsHolidaysβœ…Calendar holidays exist.
ResourcesResource assignmentβœ…Assignment model exists.
ResourcesResource workload viewβœ…Resource planning mode exists.
ResourcesResource utilizationβœ…Load summaries and capacity display exist.
ResourcesOver-allocation warningsβœ…Resource allocation diagnostics exist.
CostCost fieldsβœ…Explicit and calculated costs exist.
CustomizationCustom task fieldsβ˜‘οΈRows can carry custom data; formal custom field schema is planned.
CustomizationCustom columnsβ˜‘οΈRevoGrid column foundation and packaged Gantt column presets exist; broader custom-column API is planned.
EditingInline grid editingβœ…Grid edits patch task fields.
EditingDrag task barsβœ…Task bar drag exists.
EditingResize task barsβœ…Task bar resize exists.
EditingProgress drag/editβœ…Progress interaction exists.
TimelineZoom levelsβœ…Preset and custom zoom exist.
TimelineTimeline markersβœ…Time ranges, project line, today line, milestone lines, and task markers exist.
TimelineToday lineβœ…Today line is supported.
SelectionMulti-selectionβ˜‘οΈRevoGrid selection exists; multi-task Gantt operations are planned.
KeyboardKeyboard navigationβ˜‘οΈRevoGrid foundation exists; Gantt-specific shortcuts are planned.
HistoryUndo / redoβœ…Gantt history snapshots exist.
Import/exportGrid import / exportβœ…CSV export is available in RevoGrid core; Excel import/export is available in RevoGrid Pro, with Gantt toolbar action helpers.
Import/exportGantt project import / exportβœ…Typed project snapshots include clone/export/parse JSON helpers, REST/GraphQL adapter examples, and a PostgreSQL persistence recipe; broader project-file adapters are planned.
Import/exportMS Project-style compatibility layer🚧🚧.
PerformanceLarge project virtualizationβ˜‘οΈRevoGrid virtualization exists; Gantt-specific server/window model is planned.
PerformanceServer-side loading for enterprise datasets🚧Not implemented.

Scheduler

Resource planning for teams, equipment, rooms, vehicles, and operations.

Feature groupFeatureStatusNotes
Timeline viewsResource timeline viewβœ…Resource planning mode renders resource rows with load bars.
Timeline viewsHour / day / week / month / custom range viewsβœ…Default timeline zoom levels include hour-day, day-week, week-month, month-quarter, quarter-year, year-quarter, and multi-year-quarter; minute-level presets remain advanced/explicit, and custom zoom levels are configurable.
Timeline viewsHorizontal scheduling modeβœ…Current resource planning and Gantt timeline are horizontal.
Timeline viewsVertical scheduling mode🚧Needs dedicated Scheduler layout.
Resource managementResource schedulingβ˜‘οΈResources, assignments, capacity, and calendars exist; dedicated events/bookings/jobs model is planned.
Resource managementMulti-resource assignmentβœ…Multiple resources can be assigned to a task.
Resource managementResource grouping🚧Resource filtering exists, but grouping UI/API is planned.
Resource managementNested resource trees🚧Needs resource hierarchy model/projection.
Event editingDrag-and-drop event creationβ˜‘οΈTask drag-create exists; Scheduler event creation is planned.
Event editingDrag-and-drop event movingβ˜‘οΈTask bar moving exists; Scheduler event moving is planned.
Event editingEvent resizingβ˜‘οΈTask resizing exists; Scheduler event resizing is planned.
Event editingEvent splittingβ˜‘οΈTask split ranges exist; Scheduler event split UX is planned.
Event editingEvent merging🚧Not implemented.
Event layoutOverlapping event layout🚧Needs Scheduler event layout engine.
Event layoutStack / pack / overlap display modes🚧Needs configurable event display modes.
Editing modesRead-only modeβœ…gantt.readOnly blocks packaged task, dependency, and assignment mutation services.
Editing modesEditable modeβ˜‘οΈTask editing exists; Scheduler event editing is planned.
CalendarsCustom working hoursβ˜‘οΈCalendars support working days, holidays, hours/day, and intraday working-hour ranges through inline gantt.calendars or ganttCalendars for hour-mode Gantt shading/snapping.
CalendarsNon-working time highlightingβœ…Timeline can shade non-working time.
CalendarsTimezone supportβœ…Project and calendars carry IANA time zones.
RecurrenceRecurring events🚧Not implemented.
RecurrenceEvent exceptions🚧Not implemented.
ValidationEvent validation hooksβ˜‘οΈCancelable before-change hooks exist for tasks, dependencies, and assignments. Event-specific hooks are planned.
ValidationConflict detectionβ˜‘οΈResource over-allocation and scheduling diagnostics exist; booking conflict rules are planned.
ValidationCapacity warningsβœ…Resource planning supports capacity and over-allocation display.
ValidationAvailability rulesβ˜‘οΈResource calendars exist; richer availability rules are planned.
ValidationLocked eventsβ˜‘οΈGantt tasks support locked; Scheduler event locks remain planned.
RenderingCustom event templatesβ˜‘οΈTask renderer hooks exist; Scheduler event renderer API is planned.
RenderingCustom resource rowsβ˜‘οΈResource row projection exists; public custom resource row API is planned.
RenderingCustom timeline headersβœ…Timeline zoom/header configuration exists.
RenderingTooltips and popoversβ˜‘οΈTask tooltip hook and Gantt task detail popover model exist; richer Scheduler popovers are planned.
Grid UXInline editingβœ…Grid edits update task data.
Grid UXKeyboard navigationβ˜‘οΈRevoGrid foundation exists; Scheduler-specific keyboard workflows are planned.
Grid UXCopy / pasteβ˜‘οΈRevoGrid foundation exists; Scheduler-specific behavior is planned.
Grid UXUndo / redoβœ…Gantt integrates with history snapshots.
Grid UXFiltering and searchβœ…Tree-aware Gantt search exists.
Grid UXTyped task-column filtersβœ…Built-in numeric task columns use number filters, and built-in date task columns use the date filter family while preserving explicit column overrides.
PerformanceVirtual scrolling for large datasetsβ˜‘οΈRevoGrid virtualization exists; Scheduler-specific data windowing is planned.
PerformanceLazy loading by date range🚧Not implemented.
ExportExcel exportβœ…Supported through RevoGrid Pro ExportExcelPlugin for grid data. Timeline-image/workbook specialization can be added later.
ExportExcel importβœ…Supported through RevoGrid Pro ExportExcelPlugin; Gantt-specific project mapping can be added later.
ExportCSV exportβœ…Supported through RevoGrid core ExportFilePlugin when grid exporting is enabled.
ExportPDF exportβ˜‘οΈPrint-oriented reporting recipe exists; timeline/PDF layout export is not provided by the current grid export plugins. A combined PDF + Excel reporting recipe documents the recommended toolbar wiring.

Shared RevoGrid Planning Platform

Built on the same high-performance grid engine and scheduling foundation.

Feature groupFeatureStatusNotes
Data modelTasksβœ…TaskEntity.
Data modelEvents🚧Scheduler event entity is planned.
Data modelResourcesβœ…ResourceEntity.
Data modelAssignmentsβœ…AssignmentEntity.
Data modelDependenciesβœ…DependencyEntity.
Data modelCalendarsβœ…CalendarEntity.
Data modelBaselinesβœ…BaselineSnapshot.
Data modelTime rangesβœ…Timeline visual ranges exist.
Data modelConstraintsβœ…Task constraints exist.
Data modelCustom metadataβ˜‘οΈTags/notes and row extensibility exist; typed metadata schema is planned.
Data modelCustom field schemas🚧Not implemented.
Data modelTyped data modelsβœ…Typed config, entities, events, and projected rows exist.
Data modelFramework-agnostic coreβœ…Engine/projection/core are framework-independent TypeScript modules.
Scheduling engineCalendar-aware date calculationβœ…Implemented.
Scheduling engineDependency-aware recalculationβœ…Implemented.
Scheduling engineForward schedulingβœ…Implemented.
Scheduling engineBackward schedulingβœ…Implemented.
Scheduling engineManual vs automatic schedulingβœ…Implemented.
Scheduling engineConstraint handlingβœ…Implemented.
Scheduling engineCritical path calculationβœ…Implemented.
Scheduling engineResource conflict detectionβœ…Implemented as resource over-allocation diagnostics.
Scheduling engineConfigurable validation rulesβ˜‘οΈPolicy options and cancelable hooks exist; rule registry is planned.
Scheduling engineTransaction-based updatesβ˜‘οΈMutation services exist; public transaction API is planned.
Scheduling engineBatch recalculationβœ…Engine recalculates resolved project snapshots.
Scheduling engineDeterministic scheduling resultsβœ…Implemented.
Grid foundationRevoGrid-powered left-side gridβœ…Gantt projects rows and columns into RevoGrid.
Grid foundationVirtualized rows and columnsβœ…RevoGrid foundation.
Grid foundationFrozen columnsβœ…RevoGrid/Pro foundation.
Grid foundationColumn groupingβœ…RevoGrid foundation.
Grid foundationColumn resizingβœ…RevoGrid foundation.
Grid foundationColumn reorderingβœ…RevoGrid foundation.
Grid foundationCustom cell renderersβœ…RevoGrid templates and Gantt bar hooks.
Grid foundationCustom editorsβ˜‘οΈRevoGrid editor foundation exists; Gantt editor forms are planned.
Grid foundationTree dataβœ…Tree plugin integration.
Grid foundationRow groupingβ˜‘οΈRevoGrid/Pro foundation exists; Gantt-specific row grouping is planned.
Grid foundationSortingβ˜‘οΈRevoGrid foundation exists; scheduler-safe sorting policy is planned.
Grid foundationFilteringβœ…Gantt search and RevoGrid filtering foundation.
Grid foundationSelectionβœ…RevoGrid foundation.
Grid foundationClipboardβœ…RevoGrid/Pro foundation.
Grid foundationKeyboard navigationβœ…RevoGrid foundation.
Grid foundationThemingβœ…Gantt SCSS and RevoGrid theming foundation.
Grid foundationPlugin architectureβœ…Gantt composes feature tools and Pro plugins.
Enterprise performanceVirtual renderingβœ…RevoGrid foundation.
Enterprise performanceLarge dataset supportβ˜‘οΈRendering foundation exists; server/window data model is planned.
Enterprise performanceLazy loading🚧Not implemented.
Enterprise performanceDate-range loading🚧Not implemented.
Enterprise performanceViewport-aware loading🚧Not implemented.
Enterprise performanceServer-side data model🚧Not implemented.
Enterprise performanceIncremental updatesβ˜‘οΈLocal mutation services exist; remote incremental sync is planned.
Enterprise performanceReal-time updates🚧Not implemented.
Enterprise performanceOptimistic updates🚧Not implemented.
Enterprise performanceWebSocket-ready data flow🚧Not implemented.
Enterprise performanceBatched mutationsβ˜‘οΈControlled local mutations exist; explicit batch API is planned.
Enterprise performanceMinimal re-renderingβ˜‘οΈGrid sync update modes exist.
Framework supportReactβœ…Gantt demos/components exist.
Framework supportVueβœ…Gantt demos/components exist.
Framework supportAngularβœ…Gantt demos/components exist.
Framework supportSvelteβ˜‘οΈSvelte usage example exists; packaged wrapper/API docs are planned.
ExtensibilityCustom task rendererβœ…Task bar color/content/tooltip hooks.
ExtensibilityCustom event renderer🚧Requires Scheduler event model.
ExtensibilityCustom dependency rendererβ˜‘οΈDependency layer exists; public renderer hook is planned.
ExtensibilityCustom tooltip rendererβœ…Task tooltip hook and built-in tooltip field selection exist.
ExtensibilityCustom editor formsβœ…Task editor form schema, submit normalization helper, and packaged Preact row-context-menu dialog plugin exist; the packaged dialog edits task fields and resource assignments.
ExtensibilityCustom validationβ˜‘οΈCancelable before-change events and validation recipe examples exist; validation registry is planned.
ExtensibilityCustom scheduling rules🚧🚧.
ExtensibilityCustom calendarsβœ…Calendar entities are configurable.
ExtensibilityCustom export pipelineβ˜‘οΈGantt Excel row mapping, toolbar export actions, print recipe, and combined PDF + Excel reporting recipe exist; full pipeline hooks are planned.
ExtensibilityCustom context menuβœ…Gantt enables row, column, and timeline context menus by default, prepends default actions through RevoGrid Pro ContextMenuPlugin, preserves custom menu items, and supports opt-out through gantt.contextMenu.
ExtensibilityPlugin APIβœ…Gantt plugin and feature-tool architecture exist.
ExtensibilityEvent lifecycle hooksβœ…Before-change and interaction events exist.
ExtensibilityTyped APIβœ…Typed config/entities/events exist.
CollaborationOptimistic editing🚧🚧.
CollaborationConflict resolution hooks🚧🚧.
CollaborationChange historyβœ…History integration exists.
CollaborationAudit log support🚧🚧.
CollaborationUser presence markers🚧🚧.
CollaborationComments on tasks/events🚧🚧.
CollaborationLocking / checkout modeβ˜‘οΈGantt task locked prevents packaged task mutation paths; broader checkout workflows are planned.
CollaborationRole-based editabilityβ˜‘οΈRole/permission helpers exist for before-change hooks; packaged policy wiring is planned.
CollaborationRead-only viewsβœ…gantt.readOnly blocks packaged task, dependency, and assignment mutations.
CollaborationApproval workflow hooks🚧🚧.
Export and integrationCSV exportβœ…RevoGrid core ExportFilePlugin exports visible grid data as CSV.
Export and integrationExcel exportβœ…RevoGrid Pro ExportExcelPlugin exports grid data to .xlsx.
Export and integrationExcel importβœ…RevoGrid Pro ExportExcelPlugin imports .xlsx/.xls into the grid.
Export and integrationPDF exportβ˜‘οΈPrint-oriented reporting recipe exists; native PDF export is not implemented by core/Pro/Gantt export plugins.
Export and integrationPNG export🚧Not implemented by core/Pro/Gantt export plugins.
Export and integrationJSON import/exportβœ…Gantt core exports clone/export/parse helpers for typed project snapshots.
Export and integrationiCalendar support for Scheduler🚧🚧.
Export and integrationMS Project-style import/export layer🚧🚧.
Export and integrationREST API integrationβ˜‘οΈProject snapshot REST adapter example exists; production backend templates are planned.
Export and integrationGraphQL integrationβ˜‘οΈProject snapshot GraphQL adapter example exists; production backend templates are planned.
Export and integrationServer-side adapter examplesβ˜‘οΈREST, GraphQL, and PostgreSQL/Supabase-style examples exist; Firebase and server-window examples are planned.
Export and integrationSupabase / Firebase / PostgreSQL examplesβ˜‘οΈPostgreSQL SQL builders and Supabase-style adapter exist; Firebase example is planned.
Export and integrationHeadless scheduling engine modeβ˜‘οΈEngine is framework-independent; public headless API/package is planned.

Feature: Gantt Task Editor Dialog Plugin

Status: Existing βœ…

The packaged task editor dialog provides an MS Project-style β€œTask Information” entry point without forcing application teams to build the popup UI from scratch. GanttPlugin installs GanttTaskEditorDialogPlugin by default for every Gantt instance; the plugin mounts a Preact <dialog> host beside the grid, prepends Edit... to the row context menu, renders the task editor schema from TASK_EDITOR_FIELD_SCHEMA, and normalizes submissions with normalizeTaskEditorSubmit().

Design notes:

  • The plugin is still exported as a separate enterprise plugin for backwards compatibility, but GanttPlugin auto-installs it so teams do not need to register it manually for normal Gantt usage.
  • Row context menus get Edit... from the task editor plugin and Add from the Gantt context-menu tool by default; both compose with custom row context-menu configuration instead of replacing application items.
  • gantt.contextMenu = false opts out of generated Gantt menu items; ganttTaskEditorDialog.contextMenu can independently disable or re-enable the packaged edit-task menu entry.
  • Double-clicking a Gantt task, milestone, or summary bar dispatches gantt-task-edit, which opens the packaged editor when GanttTaskEditorDialogPlugin is installed.
  • Newly created tasks open in the editor by default after gantt-task-created; ganttTaskEditorDialog.openOnCreate = false keeps creation silent for applications that want a custom follow-up flow.
  • The dialog is closed by default. Its CSS explicitly hides dialog:not([open]) so the browser default dialog box never occupies layout before a user opens it.
  • Default submit behavior applies task field patches through the Gantt runtime/provider edit path, not by replacing grid.source directly. Applications can intercept through ganttTaskEditorDialog.onSubmit; returning false skips the default update.
  • History covers task editor task field patches, resource assignment changes, dependency tab changes, direct external grid.source edits observed by Gantt, and toolbar-driven task/dependency/baseline changes.
  • Task resolution prefers Gantt task-bar data-gantt-task-id, then focused row data, then row text fallback for framework/browser context-menu timing differences.
  • Read-only projects hide the context-menu item unless ganttTaskEditorDialog.readOnly overrides the behavior.

Current Extra Strengths Beyond The Initial List

AreaFeatureStatus
SchedulingBackward/project-finish schedulingβœ…
SchedulingResource leveling modes: off, warn, autoβœ…
SchedulingSlack-bound resource levelingβœ…
SchedulingProgress-aware remaining-duration schedulingβœ…
SchedulingFixed-duration, fixed-work, and fixed-units effort modesβœ…
DiagnosticsScheduler warnings projected into row dataβœ…
DiagnosticsDependency validation summary helperβœ…
DiagnosticsResource over-allocation summary helperβœ…
DependenciesPredecessor/successor text parser and formatterβœ…
TimelineCustom milestone flag linesβœ…
TimelineCustom task marker hookβœ…
TimelineCustom task bar color/content/tooltip hooksβœ…
ToolbarBaseline capture, critical-path toggle, and timeline navigation actionsβœ…
RenderingRead-only and locked-task indicator metadataβœ…
CostAssignment-derived cost and parent cost rollupsβœ…
HistoryStructural undo/redo for task hierarchy and dependenciesβœ…
SearchTree-aware search preserving ancestors and descendantsβœ…

Roadmap Summary

Priority area🚧 work
Scheduler product layerEvent model, booking/job/shift terminology, dedicated views, recurrence, exceptions, vertical mode, event layout modes, Scheduler-specific renderers and validation.
Enterprise dataLazy loading, date-range loading, viewport-aware loading, server-side model, real-time adapters, optimistic updates, WebSocket-ready data flow.
CollaborationPresence, comments, audit logs, role-based editability, locking/check-out, conflict resolution, approval hooks.
Import/exportNative PDF/PNG export, iCalendar, MS Project-style compatibility layer. CSV export and Excel import/export already come from RevoGrid core/Pro; Gantt adds toolbar helpers, Excel row mapping, print recipe, and JSON project snapshot helpers.
ExtensibilityCustom dependency renderer, editor forms, scheduling-rule registry, export pipeline.
IntegrationsFirebase, production server-side templates, headless scheduling engine API/package, packaged Svelte docs/wrapper. REST, GraphQL, and PostgreSQL/Supabase-style examples now exist.