---
name: project-management-integrations
description: Gantt charts, Kanban boards, scheduling, and resource management libraries that integrate with MUI — SVAR, DHTMLX, Bryntum, Syncfusion, FullCalendar, dnd-kit, and architecture patterns
triggers:
- Gantt chart
- Kanban board
- project management
- scheduling
- resource management
- timeline
- drag and drop
- dnd-kit
- SVAR Gantt
- DHTMLX
- Bryntum
- Syncfusion
- FullCalendar
- task board
- contractor scheduling
allowed-tools:
- Read
- Glob
- Grep
- Write
- Edit
globs:
- "*.tsx"
- "*.ts"
---
# Project Management Integrations for MUI Apps
Gantt charts, Kanban boards, scheduling, and resource management libraries
that compose with MUI's theme, layout, and component slots.
MUI X does not ship a native Gantt component (roadmap item, not yet available).
Use these libraries for the timeline and MUI for everything around it.
---
## Gantt Chart Libraries
### SVAR React Gantt — Best Free Option (MIT)
```bash
npm install wx-react-gantt
```
**Free MIT core:**
- Interactive drag-and-drop task editing on timeline
- Task dependencies (FS, SS, EE, SE)
- Hierarchical/summary tasks with collapsible groups
- Customizable task bars, tooltips, grid columns, time scale
- Multiple zoom levels, keyboard navigation, light/dark themes
- Full TypeScript, React 19 compatible, Vite/Next.js
- 10,000+ task performance
**SVAR PRO (~$524/dev perpetual) adds:**
- Working-day calendars per project/task/resource
- Baselines (original plan vs current)
- Auto-scheduling (tasks shift when dependencies change)
- Split tasks, undo/redo, rollups, slack visualization
- Export to PDF, PNG, Excel
- Import/export MS Project files
**MUI integration:**
```tsx
import { Gantt } from 'wx-react-gantt';
import Paper from '@mui/material/Paper';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
function ProjectGantt({ tasks, links }) {
const [editTask, setEditTask] = useState(null);
return (
{/* MUI toolbar above Gantt */}
{/* Gantt handles timeline rendering */}
setEditTask(task)}
/>
{/* MUI Dialog for task editing */}
);
}
```
### DHTMLX React Gantt — Enterprise (Paid)
```bash
npm install @dhx/react-gantt
```
- Renders 30,000+ tasks smoothly
- Auto-scheduling, critical path calculation
- Resource management with histogram (PRO)
- Working time calendars at project/task/resource levels
- Undo/redo with Valtio or Redux
- **Official MUI examples** in docs using MUI Button, Divider, ButtonGroup, icons
- Standard: free (limited); PRO: ~$699/dev; Team: ~$1,299
### Bryntum Gantt — MS Project Feature Parity (Paid)
- MS Project-equivalent scheduling engine (ChronoGraph)
- Critical path with early/late dates, free slack, total slack
- Baselines: any number of snapshots
- Progress line visualization
- Resource assignment column with multi-select picker
- CSS variables align to MUI theme tokens
- ~$680-940/dev perpetual
- **SaaS/OEM requires separate license** — contact before committing
### Syncfusion React Gantt — Free for Small Teams
- **Free Community License** for <$1M revenue, ≤5 devs, ≤10 employees
- Critical path with `enableCriticalPath` prop
- Resource view, filtering, split tasks, undo/redo
- Part of 1,900+ component suite
- Export PDF/CSV/Excel
### FullCalendar Premium — Resource Scheduling ($480/dev/yr)
- Free MIT: day/week/month calendar, drag-and-drop
- Premium: Resource Timeline (horizontal, Gantt-like), Vertical Resource view
- Best for contractor availability/booking views, not dependency Gantt
---
## Feature Comparison Matrix
| Feature | SVAR Free | SVAR PRO | DHTMLX PRO | Bryntum | Syncfusion Community |
|---------|:---------:|:--------:|:----------:|:-------:|:--------------------:|
| **Cost** | Free MIT | ~$524/dev | ~$699/dev | ~$680/dev | Free (<$1M) |
| **React native** | ✓ | ✓ | ✓ | Wrapper | Wrapper |
| **Drag/drop** | ✓ | ✓ | ✓ | ✓ | ✓ |
| **Dependencies** | ✓ | ✓ | ✓ | ✓ | ✓ |
| **Critical path** | — | — | ✓ | ✓ | ✓ |
| **Baselines** | — | ✓ | ✓ | ✓ | ✓ |
| **Auto-scheduling** | — | ✓ | ✓ | ✓ | ✓ |
| **Resource mgmt** | — | — | ✓ | ✓ | ✓ |
| **Working calendars** | — | ✓ | ✓ | ✓ | ✓ |
| **MS Project import** | — | ✓ | — | — | — |
| **Export PDF/Excel** | — | ✓ | ✓ | ✓ | ✓ |
| **Undo/redo** | — | ✓ | ✓ | ✓ | ✓ |
| **MUI theming** | ✓ | ✓ | ✓ documented | ✓ | CSS vars |
| **SaaS/OEM allowed** | ✓ MIT | ✓ | ✓ | Need OEM | Needs paid |
| **Max tasks** | 10K+ | 10K+ | 30K+ | 30K+ | Large |
---
## Kanban Board Libraries
### dnd-kit — Modern Standard (MIT Free)
```bash
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities
```
The successor to `react-beautiful-dnd`. Community standard for React DnD.
```tsx
import {
DndContext,
DragOverlay,
closestCorners,
PointerSensor,
KeyboardSensor,
useSensor,
useSensors,
} from '@dnd-kit/core';
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import Paper from '@mui/material/Paper';
import Card from '@mui/material/Card';
import Typography from '@mui/material/Typography';
import Avatar from '@mui/material/Avatar';
import Chip from '@mui/material/Chip';
import Stack from '@mui/material/Stack';
// Sortable card using MUI Card
function KanbanCard({ task }: { task: Task }) {
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
id: task.id,
});
const style = {
transform: CSS.Transform.toString(transform),
transition,
opacity: isDragging ? 0.5 : 1,
};
return (
{task.title}
);
}
// Kanban column
function KanbanColumn({ column, tasks }: { column: Column; tasks: Task[] }) {
return (
{column.title}
t.id)} strategy={verticalListSortingStrategy}>
{tasks.map((task) => (
))}
);
}
// Board with drag between columns
function KanbanBoard({ columns, tasks }: KanbanBoardProps) {
const sensors = useSensors(
useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),
useSensor(KeyboardSensor),
);
const [activeId, setActiveId] = useState(null);
return (
setActiveId(active.id as string)}
onDragEnd={handleDragEnd}
onDragOver={handleDragOver}
>
{columns.map((col) => (
t.columnId === col.id)}
/>
))}
{/* Ghost clone while dragging */}
{activeId && (
{findTask(activeId)?.title}
)}
);
}
```
**Pattern:** Intercept `onDragEnd` to call ASP.NET Core PATCH endpoint for column/order change. Use `DragOverlay` with MUI elevation for smooth animated ghost.
### react-mui-scheduler — MUI-Native Calendar (MIT Free)
```bash
npm install react-mui-scheduler
```
- Month/week/day/timeline views built on `@mui/material`
- Event grouping by resource
- Search bar, date picker, view switcher in toolbar
- Localization: 8 languages
- Best for appointment/availability calendars (contractor scheduling, event booking)
### Pragmatic Drag and Drop (Atlassian) — MIT Free
```bash
npm install @atlaskit/pragmatic-drag-and-drop
```
- Powers Jira and Trello's drag-and-drop
- Lower-level API than dnd-kit, purpose-built for production kanban at scale
- MIT open-source since 2024
---
## Recommended Stack by Use Case
| Use Case | Library | License |
|----------|---------|---------|
| Contractor project timeline (internal) | SVAR Gantt Free | MIT |
| Full MS Project-equivalent Gantt in SaaS | Bryntum OEM or DHTMLX PRO | Paid |
| Free Gantt for early SaaS <$1M revenue | Syncfusion Community | Free |
| Resource booking / availability calendar | FullCalendar Premium + MUI | $480/yr |
| Kanban task board (Jira-style) | dnd-kit + MUI Cards | MIT |
| Contractor appointment scheduler | react-mui-scheduler | MIT |
| Flexible timeline (bookings, media) | gantt-schedule-timeline-calendar | Freemium |
---
## Architecture: Gantt + MUI DataGrid Sidebar
The most powerful project management UI combines a Gantt timeline with a companion DataGrid.
```
┌─────────────────────────────────────────────────────────┐
│ MUI AppBar Toolbar │
│ [Zoom In] [Zoom Out] [View: Gantt|Kanban|Calendar] │
│ [DateRangePicker] [Export] │
├───────────────────────┬─────────────────────────────────┤
│ MUI X DataGrid │ Gantt Timeline (SVAR/DHTMLX) │
│ ┌─────────────────┐ │ ┌─────────────────────────────┐│
│ │ Task | Status │ │ │ ▓▓▓▓▓▓░░░ Project Alpha ││
│ │ Alpha| ● Active │◄─┼──│ ▓▓▓▓░░░░░ Task 1 ││
│ │ Beta | ○ Draft │ │ │ ▓▓▓▓▓░░ Task 2 ──────►││
│ │ Gamma| ● Active │ │ │ ▓▓▓ Task 3 ││
│ └─────────────────┘ │ └─────────────────────────────┘│
├───────────────────────┴─────────────────────────────────┤
│ MUI Drawer (right) — Task Detail Form │
│ [RHF Form] [Resource Autocomplete] [Time Entry Grid] │
└─────────────────────────────────────────────────────────┘
```
**Implementation:**
1. **Left panel:** MUI X DataGrid with status chips, assignee avatars, priority bars
2. **Right panel:** Gantt timeline synchronized to DataGrid selection
3. **Sync:** Click DataGrid row → scroll Gantt to task; click Gantt bar → select DataGrid row
4. **Detail drawer:** MUI Drawer with RHF form, resource Autocomplete, sub-DataGrid of time entries
5. **Toolbar:** MUI GridToolbarContainer with zoom controls, view switches, DateRangePicker
```tsx
function ProjectManagementView({ tasks, links }) {
const [selectedTaskId, setSelectedTaskId] = useState(null);
const [drawerOpen, setDrawerOpen] = useState(false);
const ganttRef = useRef(null);
const gridApiRef = useGridApiRef();
// Sync: DataGrid row click → Gantt scroll
const handleGridRowClick = useCallback((params: GridRowParams) => {
setSelectedTaskId(params.id as string);
ganttRef.current?.scrollToTask(params.id);
}, []);
// Sync: Gantt bar click → DataGrid selection
const handleGanttTaskClick = useCallback((task: Task) => {
setSelectedTaskId(task.id);
gridApiRef.current?.selectRow(task.id);
gridApiRef.current?.scrollToIndexes({ rowIndex: findRowIndex(task.id) });
}, []);
return (
{/* Left: DataGrid */}
{/* Right: Gantt */}
{ setSelectedTaskId(task.id); setDrawerOpen(true); }}
/>
{/* Detail Drawer */}
setDrawerOpen(false)}
PaperProps={{ sx: { width: 480 } }}
>
{selectedTaskId && (
{ refetchTasks(); setDrawerOpen(false); }}
/>
)}
);
}
```
The Gantt library handles only timeline rendering and dependency logic.
MUI handles all surrounding UI — dialogs, forms, notifications, navigation, theming, and data tables.
Result: unified, branded experience matching your design system.