new
improved
fixed
Timefold Platform
Employee Shift Scheduling
Field Service Routing
Pickup & Delivery Routing
Redesigned visualizations and improved service time limits in FSR, improved replanning in ESS replanning, and more
Today, we're announcing version v1.15 of the Timefold Platform and updates to the Timefold models.
This new version of the Timefold Platform comes with these platform improvements:
- A tidier token list, with expired and revoked tokens removed after 30 days: The platform now deletes personal access tokens 30 days after they expire or are revoked. Active tokens are never deleted. Tokens you revoked before this release are deleted 30 days after this release. See personal access tokens for more details.
- Log in to Timefold's Feature Requests Board from the United States region: You can now log in to Timefold's Feature Requests Board with a Timefold Platform user account from the United States region. When you log in, you first choose your region, Europe or United States, and then log in with your user account for that region. See Timefold's Feature Requests Board for more details.
- Get tenant notifications in a Microsoft Teams channel: The Email channel section now explains how to get notifications in a Microsoft Teams channel: forward a tenant member's notification emails to the Teams channel's email address. See Email channel for more details.
- Your self-hosted license covers the platform's Timefold Solver (self-hosted only): The License section now explains that your self-hosted Timefold Platform license also covers the Timefold Solver instance running within the platform, so you don't need a separate Timefold Solver Enterprise Edition license (self-hosted only). See License for more details.
- Toggle every optional model parameter in configuration profiles: In a configuration profile, every optional parameter a model declares now has a toggle to turn it on or off. Turn a parameter off to let the model use its own default value for it. The platform reads which parameters are optional from the model itself, instead of from a fixed list, so the toggle works for every model, including your own custom models. TheImport profiledialog also shows its file drop area at full width. See configuration profile and Export and import profiles for more details.
Next to that, this new version of the Timefold Platform comes with updates to these Timefold Models:
- Minimize employee disruption during replanning with kept shift tags (preview): When replanning takes a shift away from an employee, some replacement shifts disrupt them less than others. For example, an employee who loses a shift at Location 1 would rather get another shift at Location 1 than one at Location 2, so their commute stays the same. Contract disruptionRules now support a keptShiftTags field. It rewards replacement shifts that have the same tags as the shift the employee lost. You set which tags count, whether a shift must match any or all of them, and a weight.keptShiftTagsis a preview feature and subject to change. See Reward disruptions that keep shift tags for more details.
- Catch missing or misspelled tags with a tag type validation warning: A tag type in the top-leveltagTypescollection is only useful if at least one tag in the top-leveltagscollection belongs to it. If none does, every employee group and rule that references the tag type never matches. For example, the members of an employee group with that tag type ascommonTagTypecan never share a tag of that type, so the employee group can never be satisfied. Validation now reports this as a warning that names the tag type, so you catch a missing or misspelled tag at validation time. The warning does not block solving, so existing schedules keep running unchanged. See Tags and tag types for more details.
- Clearer, faster visualization: The ESS visualization is easier to read and work with. Hover cards now stay open, so you can select and copy their text, and shift cards show the shift’s priority and have a button to copy the shift ID. A new date control shows up to seven days per timeline, and the view opens on the first day that has a shift. Each filter value shows how many items match it, the Filter button shows how many values you selected, and Reset filter keeps your selected dates. The By employee timeline responds faster to filter changes and shows each employee’s worked hours as a bar in the row header. The timelines now follow the model’s own rules for skill validity, preferences, permitted overlaps and availability, and they use the model’s terms. A time zone readout shows the UTC offset, overtime is no longer drawn in red, and durations read as “7h 30m”. See Visualization for more details.
- New lesson: set limits over rolling time windows: Some limits don't follow calendar periods, for example at most five days worked in any ten-day period, or an average of four days worked per week over any four-week period. Lesson 5: Rules over different periods continues the lesson series and shows how to set these limits with rolling window rules in contracts. It explains how a rolling window moves across the schedule, how to add a limit and satisfiability to a rolling window rule, and when a rolling window rule is equivalent to a period rule, followed by a practical example. See Lesson 5: Rules over different periods for more details.

- Redesigned visualizations for improved filtering: We have redesigned the visualizations to make filtering easier for quicker access to subsets of the data. The Map, By vehicle, and By visit views are now tabs of one Visualization page, and Timefold Platform shows that page in its sidebar. Every view now supports filtering: clickFilterto drill down into a subset of the data, for example by vehicle, skill, or tag. A date control after the tabs sets the dates to show: one day on the map, and up to seven days on the timelines. The dates open on the first day with a planned visit. TheMaptab shows theBy vehicletimeline under the map, and hovering a row highlights its route. The map shows its stops right away, even on large datasets, and it stays responsive when you switch days or tabs. While the model solves, the map and the timelines keep your zoom and selected page, so you can follow the solve without losing your place. The new Efficiency X-Ray page shows how your fleet uses its time, distance, and overtime across the whole dataset. Use it to find vehicles with much more or much less work than the rest of the fleet, and to compare groups of vehicles by skill or tag. Efficiency X-Ray is a preview feature and subject to change. To request early access, contact us. See Map, By vehicle, and By visit and Efficiency X-Ray for more details.
- Fewer unnecessary overnight stays with linked shifts: A technician's local area is the area they can travel to and return from within their working day, based on their start and end locations. Previously, Timefold could use a linked shift for visits in technicians' local areas. The technician then stayed away overnight only to get more working time, and did not return to the local area at the end of the day. Now, Timefold uses a linked shift to reach visits that are far from the shift's start or end location. A visit is far from the technician's local area if the technician cannot travel to it, complete the visit, and travel back in one shift. A new medium constraintAvoid overnight stay in local areapenalizes each night of a linked shift between two visits in technicians' local areas. One such night has the same penalty as ten unassigned mandatory visits with the highest priority. The constraint is enabled by default when any linked shifts are defined. If a linked shift has no visits far from the local area, Timefold removes it before it starts to solve. The output still shows the linked shift, with no visits in its itinerary. See Avoid overnight stays in technicians' local areas for more details.
- Routes can start furthest from the end location: A new soft constraintPrefer moving towards end locationlets technicians drive to the visit furthest from their end location first and then work their way back. The long drive happens at the start of the shift, and the technician finishes the day close to the end location, for example, their home. The constraint penalizes every visit that is further from the shift'sendLocationthan the previous visit. By default, this constraint is disabled. To enable it, setpreferMovingTowardsEndLocationWeightin the model configuration. See Prefer moving towards end location for more details.
- Limit the total service time per shift: You can now limit the total time a technician spends working on visits during a vehicle shift or a linked shift, for example, to comply with labor law limits. The service duration of a shift is the effective service duration of all visits assigned to the shift. Travel time, waiting time, and breaks don't count toward the service duration. SetmaxServiceDurationon a shift for a hard limit. The newMax shift service duration (hard)constraint leaves visits unassigned rather than exceed max service duration. SetmaxSoftServiceDurationon a shift for a preferred limit. The newMax shift service duration (soft)constraint penalizes each second above the specified duration. To change the constraint weight, setmaxSoftShiftServiceDurationWeightin the model configuration. If the soft limit is higher than the hard limit, the model returns theVEHICLE_SHIFT_MAX_SOFT_SERVICE_DURATION_GREATER_THAN_MAX_SERVICE_DURATIONvalidation warning. See labor law limits, Required maximum service duration per shift, and Preferred maximum service duration per shift for more details.
- Visits no longer wait for temporary skills or tags they don't need: When a vehicle shift had temporary skills or temporary tags, a visit that did not need them could start later than necessary. The visit waited until the first temporary skill set or temporary tag set started. This happened when the visit had no required skills or tags, or when the shift's static skills or tags already covered them. Now, such a visit no longer waits for temporary skills or tags, which removes the idle time before it starts. Visits that need temporary skills or tags still wait until those skills or tags are available. See Temporary skills and Temporary tags for more details.
- Floating breaks can have a location: A floating break can now have alocation, for example, a restaurant or a canteen where the technician must take their lunch break. Previously, the model ignored thelocationof a floating break and always scheduled the break wherever the technician was on their route. When a floating break has a location, the technician travels to that location, takes the break there, and then travels to their next visit. The travel time to and from the break location is included in the schedule, and the break still starts no earlier than itsminStartTime. A floating break without a location works as before. See Floating breaks with a location for more details.
- Floating breaks fit between fixed breaks and no longer end later than necessary: Timefold can now schedule a floating break between two fixed breaks when the floating break fits in the time between them. Previously, a floating break was always scheduled after all fixed breaks that occurred in the same gap between visits, which could push the floating break past itsmaxEndTimethan necessary. TheBREAKitems in the itinerary now also reporttravelTimeFromPreviousStandstillandtravelDistanceMetersFromPreviousStandstillfor floating breaks. When a technician travels to their next visit before they take a floating break there, this travel is now reported on the break, and the visit after the break reports no travel. See Upgrade from 1.37.0 to 1.38.0 for an example. See Lunch breaks and personal appointments for more details.
- New hard constraint stops fixed breaks from starting late: A fixed break can start later than itsstartTime, for example, when the technician cannot travel to the location of the break in time. The newFixed break not delayed (hard)constraint penalizes each second that a fixed break starts after itsstartTime. The newRequireFixedBreakNotDelayedJustificationjustification shows the actual start time and the original start time of the break. The itinerary now shows the actual start and end times of a fixed break. If the break starts late, it keeps its full duration, so it also ends late. Previously, the itinerary always showed thestartTimeandendTimefrom the input, even if the technician could not start the break on time. See Personal appointments for more details.
- Floating breaks no longer push visits past their time windows: Previously, Timefold could schedule a floating break before a visit even if the break pushed the end of the visit past themaxEndTimeof its time window. Timefold now schedules the floating break after the visit instead, if the break can still end before its ownmaxEndTime. If both options break a time window, Timefold chooses the option with the smaller overrun. See Floating lunch breaks for more details.
- Pinning requested for a visit that is not in an itinerary is rejected: The model now rejects input that setspinningRequestedtotrueon a visit that is not in theitineraryof any shift. Validation fails with the errorPINNING_REQUESTED_VISIT_NOT_IN_ITINERARY. Previously, the model ignoredpinningRequestedon such a visit. When you sent the output back as the input of the next dataset, the model could then reject it, because a pinned visit cannot come after an unpinned visit. Validation now gives the same result for the first dataset and for every dataset after it.Important:Input that the model accepted before can now fail validation. See Upgrade from 1.37.0 to 1.38.0 for how to migrate. See Real-time planning: pinning visits for more details.
- Shifts without visits are penalized when their breaks make them end late: A vehicle shift without visits still takes its fixed and floating breaks. These breaks can make the shift end late, for example when the technician cannot travel to a fixed break with a location before the break starts, or when a floating break must wait for itsminStartTime. Previously, theMax shift end time (hard)andMax shift end time (soft)constraints did not penalize such a shift. The penalty appeared only when the first visit was assigned to the shift. That made the first visit look much more expensive than it was, so Timefold often left those shifts empty even when using them would improve the plan. Both constraints now also penalize shifts without visits when their breaks make them arrive at the end location aftermaxEndTimeormaxSoftEndTime. The metrics of shifts without visits do not change. See Breaks can make a shift end late for more details.
- Faster bulk visit recommendations: Bulk visit recommendations are now returned faster. Previously, a request could take 10 to 30 seconds, and the recommendations often differed only in where the last few visits were placed. See Bulk visit recommendations for more details.
- Performance improvements: The algorithm for the initial solving phase has been changed and finishes now in a fraction of the time it took before. Benchmarks show a runtime reduction of about 86% for a small dataset of up to 96% for large datasets. Apart from faster solves, this can lead to more time being available for later solving phases and thus improved solution quality.
- Reduced driver idle time before time windows open: A driver can arrive at a stop before its time window opens and then has to wait before starting the service. The new soft constraintMinimize waiting timeminimizes the total waiting time in the schedule. By default, this constraint is disabled. To enable it, setminimizeWaitingTimeWeightin the model configuration. See Minimize waiting time for more details.
Please let us know if you have feedback.