[Canonical page](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/scheduling-config/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# SchedulingConfig

Project-wide scheduling switches. It travels as the `config` field of [`ProjectData`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/project-data.md>). Every field is optional: an omitted field, a `null` field, an omitted `config` and `"config": null` all give the defaults below. Unknown keys are ignored (see [Wire format](<https://docs.dhtmlx.com/planning-engine/wasm/wire-format.md#omitted-null-and-unknown-fields>)).

## Fields

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `apply_constraints` | `boolean` | no | `false` | Turns on the eight task constraint types. With `false`, task constraints are ignored. |
| `schedule_from_end` | `boolean` | no | `false` | Schedules the project backward (ALAP) from its end. [`level`](<https://docs.dhtmlx.com/planning-engine/wasm/api/project-level.md>) refuses such a project. |
| `gap_behavior` | `"preserve"` \| `"compress"` | no | `"preserve"` | `"preserve"` keeps tasks at their own dates where links allow; `"compress"` pulls every task to its earliest position. |
| `move_projects` | `boolean` | no | `true` | `true` moves a summary and its children as one block; `false` schedules the leaves one by one. |
| `project_constraint` | `boolean` | no | `false` | Children inherit their parent summary's constraint. |
| `group_mode` | `boolean` | no | `false` | Suppresses the constraint inheritance of `project_constraint`. That's its only effect. |
| `use_progress` | `boolean` | no | `false` | Treats tasks with `progress` equal to `1` as completed and keeps them fixed. |
| `descendant_links` | `boolean` | no | `false` | Keeps links between a summary and its own descendant. With `false`, such links are dropped and reported in `notes`. |
| `calendar_mode` | `"resource"` \| `"task"` \| `"task-inherited"` | no | `"resource"` | Which calendars place the work. `"resource"`: each assignment works on its resource's calendar. `"task"`: task calendars only. `"task-inherited"`: task calendars, and a task without one uses its nearest ancestor's. |
| `strict_calendar` | `boolean` | no | `false` | Reports a `calendar-non-working` conflict when a summary moved as a block lands a child on non-working time. |
| `max_iterations` | `number` | no | `8` | Planner pass limit. An integer, at least `1`. A fraction or negative number fails with `validation` and no `path`; `0` fails with `validation`, `path: "config.max_iterations"`. |
| `project_start` | [`DateValue`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/common.md#datevalue>) \| `null` | no | absent | Lower bound for the plan, and the date source for undated tasks. |
| `project_end` | [`DateValue`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/common.md#datevalue>) \| `null` | no | absent | Upper bound for the plan, used by backward projects. |
| `duration_unit` | [`TimeUnit`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/common.md#timeunit>) | no | `"day"` | Unit of `duration` and `lag` values. Accepts `"minute"`, `"hour"`, `"day"`; `"week"`, `"month"` and `"year"` fail with `validation`. |
| `use_calendars` | `boolean` | no | `true` | `false` makes every calendar flat 24/7 time. |
| `default_resource_capacity` | `number` | no | `1` | Capacity of a resource that sets no `capacity` of its own, in assignment `value` units (`1` = 100 %). Must be finite and non-negative, or the call fails with `validation`, `path: "config.default_resource_capacity"`. |
| `root_id` | [`Id`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/common.md#id>) | no | `0` | The `parent` value that means "no parent". Ids compare like JavaScript object keys, so the default matches both `0` and `"0"`. With another `root_id`, a task with id `0` is an ordinary parent. A `parent` of `""` always means no parent. |

A value of the wrong JSON type (for example `"apply_constraints": "yes"`) fails the call with `parse`. An unknown enum string or an unparsable date fails with `validation` and `path: null`. Error kinds are described in [Error handling](<https://docs.dhtmlx.com/planning-engine/wasm/error-handling.md>).

## Used by

As `ProjectData.config`, in the `data_json` argument of:

- [`schedule`](<https://docs.dhtmlx.com/planning-engine/wasm/api/schedule.md>)
- [`JsonProject#solve`](<https://docs.dhtmlx.com/planning-engine/wasm/api/project-solve.md>)
- [`JsonProject#analyze`](<https://docs.dhtmlx.com/planning-engine/wasm/api/project-analyze.md>)

## Example

```json
{
  "apply_constraints": true,
  "gap_behavior": "compress",
  "duration_unit": "hour",
  "project_start": "2026-08-10 08:00",
  "calendar_mode": "task",
  "root_id": -1
}
```

Every field left out keeps its default. The project-data guide shows this config in a full payload: [Scheduling config](<https://docs.dhtmlx.com/planning-engine/wasm/scheduling/project-data.md#scheduling-config>).

## Related

- [`ProjectData`](<https://docs.dhtmlx.com/planning-engine/wasm/api/types/project-data.md>) - carries the config
- [Project data](<https://docs.dhtmlx.com/planning-engine/wasm/scheduling/project-data.md>) - the config in a full payload
- [Links, constraints and summaries](<https://docs.dhtmlx.com/planning-engine/wasm/scheduling/links-constraints-summaries.md>) - constraints, gap behavior and summaries
- [Working time and calendars](<https://docs.dhtmlx.com/planning-engine/wasm/scheduling/working-time-calendars.md>) - `calendar_mode` and `use_calendars`
