SchedulingConfig#

Project-wide scheduling settings. It's the config field of ProjectData, so it travels with every snapshot passed to Project#solve, Project#analyze or schedule. Every field is optional; an omitted field takes its default.

Fields#

Field Type Default Description
apply_constraints boolean false Enables task constraints (ConstraintType) as hard bounds. With false, constraints are ignored.
schedule_from_end boolean false Plans the project backward (ALAP) from its end instead of forward (ASAP) from its start. Project#level rejects a project with this set.
gap_behavior "preserve" | "compress" "preserve" "preserve": tasks keep their current dates where links allow. "compress": tasks move to the earliest position.
move_projects boolean true true moves a summary and its descendants as one block. false schedules the summary's leaves one by one, keeping their offsets within the summary.
project_constraint boolean false A child task without its own constraint inherits its parent's constraint. No effect while group_mode is true.
group_mode boolean false Turns off the constraint inheritance of project_constraint. It has no other effect.
use_progress boolean false Treats a task with progress equal to 1 as completed: it keeps its dates.
descendant_links boolean false Allows links between a summary and its own descendant. With false, such a link is dropped and reported in the result's notes.
calendar_mode "resource" | "task" | "task-inherited" "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 the nearest ancestor's.
strict_calendar boolean false Reports a calendar-non-working conflict when a moving summary block lands a task on non-working time.
max_iterations number 8 Upper limit on scheduling passes. An integer, at least 1.
project_start DateValue | null none Earliest date of the project: no task starts before it. Also the date source for tasks that have no dates of their own.
project_end DateValue | null none Upper bound of the project, used by backward (schedule_from_end) plans.
duration_unit TimeUnit "day" Unit of task duration and link lag. A task can override it with its own duration_unit.
use_calendars boolean true true schedules on working calendars. false treats every calendar as working time around the clock.
default_resource_capacity number 1 Capacity of a resource that doesn't set its own, in assignment value units (1 = 100 %). Must be finite and non-negative.
root_id Id 0 A task parent equal to this id (or "") means the task has no parent. Ids compare as normalized keys, so the default matches both 0 and "0". Such a parent is stored as no parent. Set it when the data uses another root id, such as -1 or "root"; a task with id 0 is then an ordinary parent.

null in any field reads as omitted and gives the default. Unknown keys are ignored.

The config is checked when the snapshot is imported. In both validation modes, these values throw an InputError with kind: "validation" at the field path:

Path When
config.max_iterations max_iterations is 0
config.default_resource_capacity the value is negative, NaN or infinite

Used by#

Example#

const config = {
  duration_unit: "hour",
  apply_constraints: true,
  project_start: "2026-08-14 08:00",
  calendar_mode: "task",
};