Skip to content

Version 0.4.0

Release date: November 4, 2026

  • Related lists you can work in: with Relation::editable() switches, selects and inputs work right in the list of a parent, with options per row. Edit returns to the parent.
  • Deleted records leave nothing behind: open tasks are cancelled, the clock of their workflow stops, and notifications no longer lead to a 404.
  • Presets from a link: a task or notification opens a create form with values filled in.
  • Groups with order and summary, and titles of several columns such as {last_name}, {first_name}, with a search that finds first and last name in any order.

No breaking changes and no migrations, see Upgrading to 0.4.0.

  • Titles of several columns: relationship(PersonModel::class, '{last_name}, {first_name}') on BelongsTo, relationship TextColumn and SelectFilter. Options are ordered by the columns of the template, and the search of a searchable select finds every word of the term in any column, so “Erika Mustermann” and “Mustermann, Erika” both find the person. See BelongsTo.
  • Editable columns in related lists: Relation::editable(). Saving needs the update permission of the related record and of the parent, and the record must belong to the parent. See Related records.
  • SelectColumn::optionsPerRecord(): options that differ per row, also for a field with options that depend on another field. A row without options shows its value.
  • Edit in a related list goes back to the parent after saving or cancelling. See Related records.
  • A link can preset a create form: Field::fromQuery('person') and Resource::createPath(['person' => $uuid]). See Presets from a link.
  • Groups of a list can have their own order and a summary in the header: Column::groupOrder() and Column::groupSummary(). See Grouping.
  • The search of searchable selects matches every word of the term separately (words are split at spaces and commas); before, the whole term had to be contained as one string.
  • BelongsTo::default() with a UUID selected the wrong record without an error: MySQL reads the start of “01a1…” as the number 1. It now accepts the UUID.
  • Deleting a record left its open tasks and decisions in the inbox, where their link ended in a 404, and reminders and escalations kept running. All open tasks of the record are now cancelled and its clock stops; transitions stay as history. Notifications keep their text but no longer link to the record.