Changelog
Follow up on the latest improvements and updates.
RSS
new
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Easier dataset management, absence-aware shift scheduling, and SLA-aware visit prioritization

- Clearer navigation and faster access to documentation in the new header: The header shown across every page has been redesigned with a clearer two-band layout. It includes a helpful description and a documentation link that adjusts to the page you're currently viewing.
- Manage queued datasets more easily: You can now manually delete a queued dataset instead of waiting for it to start automatically or expire. The solve queue table also has a new Attempts column, showing how many times a dataset has been attempted. See solve queue for more details.
- Re-solve an invalid dataset without resubmitting it: When a dataset ends up in an invalid state, you can now re-solve it directly from a button, instead of submitting a new dataset from scratch. See invalid state for more details.
- See each plan's latest revision on the Plans overview: A plan's row on the Plans overview now shows the scores and metrics of its latest revision, instead of its original submission. This keeps the overview accurate once a plan has been re-solved or patched, without needing to switch to the Revisions tab. See Plans overview for more details.
- Faster solving by pausing automatic score analysis refresh in the UI: The Platform UI no longer automatically re-fetches score analysis while a dataset is still solving. Doing so repeatedly competed for compute resources with solving itself, which could slow it down. You can still follow how scores and output metrics evolve in real time on the dataset's solve graphs, and if you're calling the score analysis endpoint directly, you can still request it as often as you like while a dataset solves. See score analysis for more details.
- Default priority for visits without an explicit priority: Previously, a visit that did not specify its own priority always fell back to the built-in priority 6. A newdefaultPriorityfield inconfig.model.overrideslets you change this fallback for the entire dataset, without having to setpriorityon every visit individually.defaultPriorityaccepts any built-in priority (1-10,opt-1-opt-10) or, when custom priorities are configured, one of your custom priority names. See Default priority for more details.
- New constraints to penalize unassigned visits based on their SLA deadline: Route optimization now includes two new constraints, disabled by default, that penalize visits left unassigned according to how tight theirlatestSlaEndTimeis relative to the other visits in the dataset:Require scheduling mandatory visits with tighter SLA(medium) penalizes unassigned mandatory visits, more so the tighter their SLA deadline is compared to the rest of the dataset, andPrefer scheduling optional visits with tighter SLA(soft) does the same for optional visits. These give you an alternative to the existing priority-basedRequire scheduling mandatory visitsandPrefer scheduling optional visitsconstraints for deciding which visits to leave unassigned when there is not enough capacity to schedule them all. See Penalize unassigned visits based on SLA deadline for more details.
- Maintenance release: This release also updates dependencies to deliver security updates.
- Absence-aware consecutive days worked (preview): Consecutive days worked rules now support theabsenceModefield, which bridges over days an employee is fully unavailable instead of letting them break the consecutive-days streak. When set toABSENCE_AWARE, two worked days separated only by fully-absent days are treated as consecutive: for example, an employee who works Monday and Tuesday, is fully unavailable Wednesday, and works again Thursday, is treated as having worked four consecutive days, not two separate streaks.absenceModedefaults toABSENCE_UNAWARE. This is a preview feature subject to change. See Consecutive days worked for more details.
- More reliable constraint matching for shifts across time zones: Fixed inconsistent tie-breaking for shift-related constraints when shifts spanning different UTC offsets represented the same time instant.
- Maintenance release: This release updates dependencies to deliver security updates and minor performance improvements.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Richer dataset comparisons, CSV exports, and smarter visit dependency controls in FSR

- Richer, more readable dataset comparisons: The comparison table now includes a Model info section showing each dataset's model version, solver version, SDK version, build time, build commit, and branch, so you can compare across model versions when benchmarking or debugging. You can now compare constraint scores across sets of datasets, not just individual ones, and the comparison view has several slight UI improvements: columns are easier to read, and tooltips are clearer.
- Export the plans overview to CSV: The plans overview table now has an Export CSV button that downloads the latest 100 plans matching your current search and filters.
- Manually trigger a queued solve: The solve queue now has a "Run now" action that lets you manually trigger a queued execution instead of waiting for it to start automatically.
- Clearer validation for traffic-aware routing: Configuring traffic-aware routing for a map without traffic data now returns a clear validation error instead of an unclear or unexpected failure.
- Consistent tenant switching: Switching tenants now keeps you on the equivalent section of the new tenant, for example a webhook detail page lands on the new tenant's webhooks overview, instead of always redirecting you to the homepage.
- Persisted table column settings: Column visibility and order selections are now persisted across tenant management tables.
- Visit dependencies can now restrict pooling with other visits: By default, other visits can be freely scheduled between the preceding and following visit of a dependency, and multiple dependency pairs can be interleaved with one another. A new poolingTypeattribute onvisitDependencylets you restrict this per dependency, and a newconfig.model.overrides.defaultDependencyPoolingTypesetting lets you change the default for the entire dataset. Setting"poolingType": "DISALLOW_POOLING"prevents any other visit from being scheduled directly between the preceding and following visit.ALLOW_POOLING_VISITSandALLOW_POOLING_DEPENDENCIESallow pooling with only one of ordinary visits or other dependency pairs, respectively. This is useful when, for example, a technician must go straight from an equipment delivery to its installation without an unrelated job in between.
- Visit dependencies can be restricted to the same shift: Previously, the preceding and following visits of a dependency could be scheduled in any vehicle shifts or restricted to vehicle shifts of the same vehicle by "coordination": "SAME_VEHICLE". Timefold now allows restricting the preceding and following visits to the same vehicle shift by specifying"coordination": "SAME_SHIFT".
- Fixed next visit incorrectly pinned when fixed-location breaks precede it: With the default pinNextVisitDuringFreezesetting (ALWAYS), Timefold pins the visit a vehicle is already traveling to whenfreezeTimeis applied. When one or more fixed-location breaks were scheduled before a visit, Timefold could pin that visit as soon as the time of traveling to those fixed breaks was beforefreezeTime, even though the technician had only committed to traveling to (or taking) the fixed break(s), not to the visit itself. Timefold now accounts for fixed-location breaks preceding visits and only pins the visit once the vehicle has actually departed toward it, that is, after the last such break ends.
- Improved solution quality for grouping co-located visits: The Prefer grouping co-located visits constraint encourages assigning visits that share the same location consecutively in a vehicle shift's itinerary, so the vehicle can perform them without traveling in between. Timefold now uses a dedicated move that specifically targets visits sharing the same location and moves them next to each other, either within the same vehicle shift or across vehicle shifts. This results in higher quality solutions when the constraint is enabled.
- More accurate route lines on the map when breaks have a fixed location: The Map view's route lines previously only followed a vehicle shift's start location, visits, and end location, so a fixed-location break in between was not reflected in the drawn road path. Breaks with a location are now included when computing route lines, so the map more accurately traces the road path a vehicle actually takes. Adjacent duplicate locations are also no longer included, so back-to-back stops at the same location no longer produce redundant segments on the map.
- Group employee pairings by employee tag: We have added groupByEmployeeTagto employee pairings to ensure that employee pairings can be grouped based on a tag. This prevents Timefold from assigning employees to shifts at the same time but with different tags of the common tag type. WhencommonTagTypeis used withoutgroupByEmployeeTag, employee pairings are valid if two employees work shifts at the same time with an identical tag of the common tag type. WithgroupByEmployeeTagdefined, all pairings grouped by that tag will be valid only if all shifts worked at the same time have that identical tag of the common tag type. Certain employees may need to work at the same time (employee pairing), work the same type of shift (commonTagType), but also need to be grouped (groupByEmployeeTag). This feature makes it easier to define groups of employees with employee pairings.
- Improved solution quality: Timefold now favors nearby jobs both in construction heuristics and local search, producing better solutions with lower total travel time. In addition, jobs are more frequently pooled (if they allow it), leading to more efficient routes. However, if you do not want jobs to be pooled, be sure to set prohibitJobPoolingtotruefor your jobs, as it will increase the construction heuristic speed.
- Better visibility into travel efficiency and job pooling: The key performance indicators now include the average travel time per stop, as well as the percentage and absolute number of pooled jobs.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Read-only Viewer role, Scenario experiments, and monthly and absence-aware rolling window rules in ESS
- Give stakeholders and auditors safe, read-only tenant access: Tenants can now add members with a new Viewer role. Viewers can see everything in a tenant, models, datasets, configuration profiles, and saved comparisons shared with tenant members, but can’t start, edit, or delete datasets, or manage comparisons. This is useful for stakeholders or auditors who only need read access. See Viewer role for details.
- Experiments (preview): Experiments let you compare how your Timefold model performs across different scenarios and datasets in a single run, instead of manually submitting and comparing individual datasets. You define the variables up front, and the platform runs all combinations automatically, producing a comparison report where each column represents a scenario. This saves time compared to submitting each combination by hand, and experiments run on a separate solve queue, so they don’t affect or slow down your production solves. Experiments are available in preview starting with this release. See Experiments for more information and to request access.

- More accurate score analysis and recommendations with configuration profile overrides: Overrides specified in a configuration profile are now applied when calling the score analysis and recommendations endpoints. Previously, these endpoints reflected the dataset’s original configuration even when overrides had been applied. Results now accurately reflect the profile you configured, giving more accurate score analysis and recommendations.
- Interpret and share dataset comparisons more easily: Comparisons can now show diffs as a percentage instead of only an absolute value, making it easier to judge the relative impact of a change. The radar diagram in dataset comparisons can also be exported as an SVG file, making it easier to include in reports and presentations. See Comparing datasets for more details.
- Back up and share configuration profiles as JSON files: Configuration profiles can now be exported and imported as JSON files. This makes it easy to back up a profile before making risky changes, or to share a profile configuration between team members or environments. See Export and import profiles for more details.
- Improved documentation search: The documentation site now has a dedicated search page, in addition to the in-page search modal. From the search modal, click "See all results" to open the full search results page, which supports paging and filtering by book and product.
- See your most-used destinations first in the command palette: Opening the command palette without typing a query now shows your recently used entries first, topped up with the highest-priority entries, instead of an empty dialog. See Using the Command Palette for more details.
- Fixed next visit incorrectly pinned when fixed-location breaks precede it: With the defaultpinNextVisitDuringFreezesetting (ALWAYS), Timefold pins the visit a vehicle is already travelling to when freezeTime is applied. When one or more fixed-location breaks were scheduled before a visit, Timefold could pin that visit as soon as the time of travelling to those fixed breaks was before freezeTime, even though the technician had only committed to travelling to (or taking) the fixed break(s), not to the visit itself. Timefold now accounts for fixed-location breaks preceding visits and only pins the visit once the vehicle has actually departed towards it, that is, after the last such break ends. See Finer control over pinning with freezeTime for more details.
- Fewer unnecessary visit delays when travel times are asymmetric: With asymmetric travel times between locations (the travel time from A to B different from the travel time from B to A), Timefold could wrongly apply a fixed break between two visits instead of being deferred past both of them, even though the vehicle could not actually reach the break in time from the earlier visit. This means a fixed break could delay a visit that could have been scheduled earlier, resulting in a worse solution than necessary.
- No more infeasible solutions from inconsistent fixed-visit start times: When a visit was pinned to a specificstartServiceTimeand vehicle shift, but the input was inconsistent (for example, because the technician could not actually start at the specified time given the travel distances involved) Timefold would introduce hard score violations when trying to enforce the exact fixed start service time. Timefold now handles this gracefully by computing the feasible start service time for each fixed visit during preprocessing. See Changelog for more details and upgrade instructions.
- No more solver hangs when a break overlaps a visit with actuals: When a visit with anactualStartServiceTimeoverlapped with a fixed break, Timefold could get stuck in an infinite loop while repeatedly trying to apply the break. This means Timefold should no longer get stuck on such inputs.
- Account for holidays when calculating delays between dependent visits: ThedateAdjusterConfigurationobject in the model input now has a holidays field to modify the behavior of theNEXT_WORKING_DAYadjuster specification to be used for delays between dependent visits. It takes an array of ISO 8601 dates which are exceptions to the regular working days as stated in workingDays. For example, this allows accounting for bank holidays correctly. For further information, consult the documentation on visit dependencies with delay and the adjuster functions.
- No more overlapping fixed and floating breaks in the schedule: Timefold could fail to apply a fixed break that should have applied, when the visit preceding it was delayed by a floating break. This could result in a fixed break overlapping with a floating break in the schedule. Timefold now correctly applies the fixed break in this scenario.
- Recommendations for shifts with no eligible employees: The recommendations API now returns employee suggestions even when no employee meets all hard constraints for a shift. Previously, the solver didn’t return recommendations that broke hard constraints. Now, the solver returns the top recommendations, even if those recommendations break hard constraints. For more information, see Recommendations.
- Monthly rolling window rules for more flexible scheduling: Rolling window rules now supportMONTHLYrolling window type. This allows you to define rules that apply on a calendar month basis, providing greater flexibility in scheduling and planning. See Minutes worked in a rolling window for more details on rolling window rules.
- Deprecated confusing recommendation endpoint: We have deprecated the following endpoint to avoid confusion with other recommendation endpoints.POST /v1/schedules/{id}/recommendations/recommend-employeesPlease use this endpoint instead:POST /v1/schedules/recommendations/recommend-employeesFor more information, see Recommendations.
- Absence-aware rolling window rules (preview): Rolling window rules now support theabsenceModefield, which scales the effective limit proportionally based on each employee’s availability within the rolling window. See Changelog for use cases and details.
- Be warned when a shift references an unknown employee: A shift, or a shift’s preferred, unpreferred, or prohibited employee list, that references an employee ID not present in the schedule was previously not validated at all. This is now reported as aSHIFT_UNKNOWN_EMPLOYEEwarning. The schedule is accepted and solved normally, with the unknown employee reference surfaced so you can review and correct it.
- Evaluate patient transport scenarios with a new NEMT demo dataset: The list of demo datasets has been extended with a new use case based demo dataset for Non-Emergency Medical Transportation (NEMT). The NEMT demo dataset includes a set of jobs and driver shifts that represent a typical Non-Emergency Medical Transportation scenario, including multiple stops for pick-up and drop-off of patients. It contains multiple legs for patients (home to medical facility and back) as well as time windows and skill requirements.
- More realistic location distribution in demo datasets: The location generator for the demo datasets has been improved to generate more realistic locations. Locations will now be generated with more density around the city center and less density in the outskirts, which better reflects real-world scenarios.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Task Scheduling
Pickup & Delivery Routing
Task Scheduling launches, batch recommendations for ESS, and smarter comparison tools
- Constraint scores in run comparison: The comparison table now includes a "Constraint scores" group that shows the per-constraint score breakdown for each dataset. Scores are color-coded and sorted using the score analysis sort order. This is available when comparing single datasets; support for grouped dataset columns is planned for a future release. This is e.g. useful to see the impact on specific constraint score during goal alignment experiments See Comparing datasets for details.

- Sort constraints in score analysis: The constraint table in score analysis now supports sorting by name (useful to get started with a model), number of matches (useful to explore justifications), or constraint weight, in addition to the default sort by score. Each sort option orders constraints within their group first, then orders the groups themselves by the same criterion. See Score analysis for more details.
- Power-tune the default smart termination: Solving on the platform stops automatically once score improvements diminish; this is the default termination strategy, and for most datasets the defaults work well out of the box and is the best balance between time, cost and solution quality. For specific datasets where you want more control, "Advanced configuration" in a configuration profile now exposes two parameters: sliding window duration and minimum improvement ratio. Use the Configuration Profiles UI to learn about the parameters and tweak them.
- Several additional bug fixes, security fixes, and stability and UI improvements.
- Next working day date adjuster for visit dependencies: When a multi-day job is split across two visits, you can now specify that the follow-up visit must start on the next working day, without having to hardcode a specific weekday. SetminStartDateAdjusterormaxStartDateAdjustertoNEXT_WORKING_DAYonminDelayToormaxDelayToin the visit dependency, and the model will always push the second visit to the next business day, regardless of which day the first visit falls on. Working days default to Monday–Friday and can be customized via the newworkingDaysfield indateAdjusterConfiguration. See Visit dependencies for details.
- Bulk visit recommendations now include infeasible results: Bulk visit recommendations now always return a result, even when no fully feasible assignment exists. Infeasible recommendations are ranked below feasible ones and include hard score violations, so you can see why an assignment doesn't work rather than receiving an empty response.
- durationAddedForFirstVisitOnLocation now configurable in configuration profiles: This field is now available in the model configuration section of configuration profiles for FSR. This lets you set a default overhead duration added to the first visit at any location, eg. to account for parking or building access, without having to pass it in every API call. See this changelog update for more details.
- Vehicles can travel during waiting time before a fixed break: When a vehicle shift defines multiple fixed breaks, the vehicle can utilize waiting time before a fixed break to travel to the next visit or the next location break, which will result in more efficient schedules. See upgrade to the latest version for more details.
- Several additional bug fixes and performance improvements.
- Batch recommendations: When multiple shifts need to be filled at once, you can now get recommendations for all of them in a single API call. Two modes are available, each as its own endpoint:recommend-employees-batch-per-shift: returns a ranked list of recommended employees per shift. Use this to fill shifts independently, without making a separate API call for each one.recommend-employees-batch-global: returns a single ranked list across all shifts, answering "which shift should I assign next?". Use this when you want to fill shifts one by one in the optimal order. For more information see Batch recommendations.
- Historic shift and shift group counts available in input metrics: Input metrics now report the number of historic shifts and shift groups (historicShifts, historicShiftGroups) in the input dataset. This makes it easy to verify the right amount of historical data is attached, especially when using rolling-window constraints. See Input metrics for details.
- maximumTimeBurden now configurable in configuration profiles: This field is now available in the model configuration section of configuration profiles for PDR. This lets you set the maximum extra time burden imposed on an ongoing job when a new job is added to the same vehicle, without having to pass it in every API call.
- This release includes security fixes and stability improvements.

new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Pick-up and Delivery Routing 1.0 release, and more improvements
- Spider chart tooltips with percentages: In experiment comparison charts, each axis in the spider tooltip now includes a percentage delta alongside the absolute value, making it easier to compare solver configurations at a glance. See comparing datasets for more details.

- Discover caller identity: The platform has a newGET /api/aboutmeendpoint that returns information about the API key behind the current request likethe tenant it belongs to, and the access permissions granted to it. See API usage for more details.
- Several bug fixes and stability improvements.
- Visits can now be assigned even when blocking dependent visits: By default, if assigning the preceding visit in a dependency prevented the following visit from being assigned, the preceding visit was also left unassigned. A newassignmentTypeattribute onvisitDependencylets you override this behavior per dependency, and a newconfig.model.overrides.defaultDependencyAssignmentTypesetting lets you change the default for the entire dataset. See Visit dependency assignment type for details.
- More precise shift overlap counting in rolling window rules: Rolling window rules can now be configured to count only the portion of a shift that overlaps with the rolling window, rather than counting any shift that starts within the window. See changelog for details on how to enable this.
- Minimum rest period after a consecutive shift sequence:consecutiveShiftsWorkedRulesnow support atimeOffAfterSequenceLimitfield that enforces a minimum rest period between the end of one shift sequence and the start of the next. This lets you model regulations such as "after two or more consecutive night shifts, an employee must have at least 48 hours off before their next sequence begins." See the changelog for details.
- Ability to define shift sequences based on time between end of previous shift and start of next shift: The rules to configure consecutive shifts now allow to define sequences based on the gap between the end of one shift and the start of the next, rather than only by calendar days. See changelog for details.
- Demand-based shift generation demo dataset: A new demo dataset shows how to use the shift generation feature in a realistic setting modeling a one-week restaurant schedule with lunch and dinner peaks, full-time employees, and external part-time employees. The dataset starts with no shifts and lets Timefold generate candidate shifts from templates to cover hourly demand. Use the Timefold Platform UI to trigger this new demo dataset.
- Several bug fixes and performance improvements. See changelog for details.
- Pick-up and Delivery Routing model is now stable (v1.0): The Pick-up and Delivery Routing model is marked as stable from this release forward. Its API is now backward compatible unless explicitly marked otherwise, and the model version has been aligned with the REST API version (v1).
- Changes in the API: To improve clarity and consistency in the API, we have made some changes to the input and output API of the Pick-up and Delivery Routing model. This change includes renamingeffectiveServiceDurationtoeffectiveDurationin all its occurrences in the OpenAPI specification and the model output. The specific changes can also be found in the upgrade guide.
- Machine-readable validation errors and warnings: A new endpointGET /v1/route-plans/{id}/validation-resultreturns structured validation issues with a machine-readable code (for exampleDRIVER_SHIFT_MISSING_START_TIME), a severity (ERRORorWARNING), and a detail object identifying the affected entity. See machine-readable validation results for details.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Linked shifts and bulk time window recommendations in FSR, historic shift exclusion and employee pairing improvements in ESS
- Dataset timeline now shown for non-solved datasets: The dataset timeline is now also visible for datasets that are submitted without solving. Operations such as validation can take a while for large datasets, and the timeline now reflects that progress. Previously, the timeline was only shown when a dataset was submitted for solving.
- Maximum constraint weight enforced: Constraint weights are now capped at 1,000,000,000,000 (one trillion). The limit prevents score overflow and nonsensical optimization results that can occur when weights are set too high. It is enforced when saving a configuration profile and when submitting a dataset.
- Maximum distance from road defaults to null (self-hosted only): The maximum distance from road parameter now defaults to null for self-hosted instances, meaning no distance limit is applied unless you configure one explicitly. See Installation instructions for details.
- Several smaller bug fixes and stability improvements.
- Introduced linked shifts to eliminate repeated travel (preview): Vehicles can now definelinkedShiftswhich are chains of consecutive shifts that Timefold may treat as one combined shift. This is useful when a job is too long for a single shift or when a technician stays on-site overnight to avoid traveling to a remote location twice. Timefold automatically chooses whether to use the individual shifts or the linked shift, depending on what produces the better schedule. See Linked shifts for details.
- Bulk time window recommendations (preview): A new bulk recommendations endpoint lets you request time window recommendations for multiple visits at the same time. Unlike visit group recommendations (which require each visit to be assigned to a different technician), bulk recommendations let the optimizer decide whether the visits are best served by a single technician or split across multiple technicians. Submit up to 20 visit IDs in a single request and receive ranked recommendations showing the optimal technician assignments across a given time window. This feature is in preview and might be a subject to change. See Bulk time window recommendations for more details.
- Added actual arrival and departure times for re-planning: When re-planning an active route, the actual times recorded by a technician's mobile app for already-completed or in-progress visits can now be provided directly in the planning input. This allows the solver to anchor the re-plan to what actually happened in the field rather than relying on estimated times from the previous plan, producing a more accurate schedule for all remaining visits. See Actual arrival and departure times for more details
- Maximum constraint weight enforced: Constraint weights are now capped at 1,000,000,000,000 (one trillion).
- Historic shifts excluded from constraint matching: If you define a planning window, constraint matches whose shifts all end before the planning window start are now skipped, both in constraint violations and in metrics. For example, with a planning window starting on 1st July 2026, a Daily shift pairing between two April 2026 shifts is no longer evaluated. See changelog for details.
- Machine-readable validation errors and warnings: Data pipelines that submit schedules often need to detect and handle validation issues automatically. Until now, validation messages were human-readable strings that were difficult to parse programmatically. The endpointGET /v1/schedules/{id}/validation-resultnow returns structured validation issues that your code can act on directly. Each issue includes a machine-readablecode(e.g.EMPLOYEE_REQUIRED_TAGS_IGNORED), aseverity(ERRORorWARNING), and potentially more properties that identify the affected entity, such as the shift or employee that caused the issue. This makes it possible to build automated mitigations. See Machine-readable validation results for full details and examples.
- Required tag type for employee pairings: Employee pairings now support acommonTagTypefield, making it possible to enforce that paired employees work shifts that share the same tag of a given category. This is useful in scenarios where employees not only need to work together but must also cover the same location, route, or department. See requiring a shared tag type for details.
- Maximum constraint weight enforced: Constraint weights are now capped at 1,000,000,000,000 (one trillion).
- Several smaller bug fixes.
- Maximum constraint weight enforced: Constraint weights are now capped at 1,000,000,000,000 (one trillion).
- Several smaller bug fixes.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Insights, improved SLA constraints in FSR, and improved time-between-shifts rules in ESS
- Insights (Preview): Our new Insights feature lets you track the quality and behavior of your planning datasets over time. Instead of reviewing individual results in isolation, you can now monitor key metrics across your last 30 datasets or across a 1-week, 1-month, or 3-month window. You can filter by dataset tags to focus on specific business units, regions, or planning types, and customize which input and output metrics are shown. This makes it easy to spot if changes improve or degrade solution quality, or whether key metrics are trending in the right direction over time. See Insights for more information and to get access.

- Searchable sub-group select for configuration overrides: The configuration override selector now supports search and sub-group organization, making it easier to find and apply overrides in larger configurations.
- Several security improvements and bug fixes, including a fix for a redirect loop for new users.
- New constraint to schedule visits with tight SLA deadlines earlier: Route optimization now includes the Prefer scheduling visits with tight SLAs earlier constraint (disabled by default), which encourages the model to schedule visits with tight SLA deadlines earlier in the planning period. When two visits compete for the same time slot, the visit with the tighter deadline is preferred first. This reduces the risk of missing SLA deadlines when the schedule is under pressure. See Prefer scheduling visits with tight SLAs earlier for more details.
- Exclude tags in time-between-shifts rules:minutesBetweenShiftsRulesandminimizeGapsBetweenShiftsRulesnow supportexcludePreviousShiftTagsandexcludeNextShiftTags, giving you more flexibility when defining which shift pairs a rule applies to. Previously you could only specify tags that a shift must have. Now you can also specify tags that a shift must not have, making it easier to target or skip specific shift types without having to tag every case explicitly. See Changelog for more information.
- Self-rostering and optimization scenario guide: Employees who can choose their own shifts report higher job satisfaction and lower turnover, but purely self-rostered schedules often leave coverage gaps. A new scenario guide explains how to combine employee-driven self-scheduling with Timefold optimization. See Self-rostering and optimization.
- Maintenance release updating dependencies to deliver security updates.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Demand shift generation, infeasibility handling, and more improvements
- Demand-curve based shift generation (preview): The model can now generate shifts from demand curves and shift templates. When shift generation is enabled, the shifts are automatically created as a part of the scheduling workflow. The feature can operate with different shift durations and start times to provide flexibility for scenarios like overtime. See Shift generation for more details.

- Consecutive shifts worked: Contracts now supportconsecutiveShiftsWorkedRulesto limit how many shifts employees work in a row. This feature is useful for managing employee fatigue and ensuring compliance with labor regulations regarding consecutive work periods, especially for demanding shifts like night shifts. See Consecutive shifts worked for more details.
- Tag and tag type order: The order in which tags and tag types are defined in the input no longer affects the result. This makes it easier to upload datasets without needing to sort your input. See Changelog for more details.
- Improved solution quality and validation for visit dependencies: The model now produces better results from pre-assigned solutions. See Changelog for how we did this.
- New validation warning for visit dependency timing conflicts: Some timing conflicts made a feasible solution impossible; we've introduced a validation worning for this. See Changelog for details.
- Real-time planning scenarios: We have added documentation for different real-time planning scenarios in the Pick-up and Delivery Routing model. Real-time planning allows you to update the plan in response to changes in the environment, such as a no show from a customer, a driver calling in sick or a stop taking longer than expected. This documentation provides guidance on how to use the model for these real-time planning scenarios. See real-time planning for more details. We’ve also added documentation for the from-patch preview API for real-time planning. See real-time planning using patches for more details.
- Comparison UI improvements: When comparing three or more datasets, you can now view a spider chart of key metrics alongside chosen priority metrics, allowing for better customization of and insights into your comparison reports. Additionally, you can now compare the configuration and constraints of two datasets directly in the comparison UI, not just the output metrics. This makes it easier to understand what drove a difference in results.

- Validation warnings and errors surface in the UI: Input validation warnings and errors from the model are now displayed in the UI, with machine-readable types. Validation issues are currently only shown for the Field Service Routing model.
- Several bug fixes, including validation data causing 404 errors on new datasets.
- Granular employee priority: You can now assign fine-grained numeric priority values to employees, allowing the solver to prefer higher-priority employees when assigning shifts.
- Complex tag matching expressions: Tag matching in rules now supports complex boolean expressions, not just simple single-tag matches.
- Multi-hour time intervals in demand rules: Demand rules can now span multiple hours in a single interval definition, reducing the number of rules needed for common patterns.
- Tags on breaks: You can now assign tags to breaks, enabling tag-based constraints to apply to break assignments as well as shift assignments.
- Profit as an objective function: You can now configure profit as the primary objective, allowing the solver to optimize revenue minus cost rather than pure cost minimization.
- Enhanced soft grouping of visits: This allows for user-defined grouping of visits that should be executed consecutively.
- Maximum visits per shift: You can now setmaxVisitsandmaxSoftVisitson a shift to cap how many visits a technician performs in that shift.
- Explicit optional visit priorities: You can now assign explicit priority values to optional visits, giving you finer control over which optional visits are included when capacity is constrained.
- Additional time for the first visit at a location: You can now define extra setup time for the first visit at a location, useful for scenarios where the first arrival incurs additional overhead.
- Demands at the job level: You can now define capacity demands at the job level rather than only at the stop level, simplifying configuration for jobs where all stops share the same demand.
new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Machine-readable validation errors for FSR, weights for preferences in ESS, and more
- Real-time updates to plans list: The datasets overview page in the platform now updates in real-time when new datasets are submitted or being solved.
- Several bug fixes and stability improvements, including a bug that sometimes caused a Platfrom UI login loop.
- Tag matching for breaks during shifts: By default, breaks are not counted toward hours worked. It is now possible to optionally supply tags for breaks, which specify whether breaks are counted or not towards hours worked for a certain rule. See Shift Breaks for details.
- Disruption scope: Disruption rules in employee contracts now support a configurable scope, which defines which shifts are deemed disrupted. For example, you can specify that a new shift is only considered disruptive if it starts more than 30 minutes away from the original shift's start time. This helps minimize unnecessary disruption flags when small schedule adjustments are made. This is an experimental API that may change in future releases. See Scope configuration for details.
- Multiple consecutive minutes off intervals in rolling windows: Rolling window rules now support atotalConsecutiveMinutesOffMinfield. This works alongsideconsecutiveMinutesOffMinIntervalsand lets you express complex rest requirements such as "either one block of 72 consecutive hours off, or multiple blocks of at least 32 hours that add up to 72 hours." See Total consecutive minutes off minimum in a rolling window for details.
- Machine-readable validation errors and warnings: A new endpointGET /v1/route-plans/{id}/validation-resultreturns structured validation issues with a unique ID, a machine-readablecode(for exampleVEHICLE_SHIFT_START_TIME_MISSING), a severity (ERRORorWARNING), and an optionaldetailobject identifying the specific resource that caused the issue (such as avisitIdorvehicleShiftId). Two additional endpoints let you query all known issue types:GET /v1/route-plans/validation-issue-typesandGET /v1/route-plans/validation-issue-types/{code}. See the user guide on input validation for more details.