migrations

  • createRoot is the whole React 18 opt-in

    Upgrading the package changes almost nothing; replacing render with createRoot is what switches the application into concurrent mode. Leaving the old call in place is a supported and…

  • A moved block renames without destroying

    Renaming a resource or moving it into a module makes Terraform plan a destroy and a create, and 1.1 lets the rename be declared instead. The value over…

  • Concurrent rendering is not a feature you turn on

    18 in March, after two years of alpha, and createRoot is the whole opt-in. Then a fortnight of consequences.

  • Full-text search that did not need a search engine

    A search cluster running for one feature on 40,000 rows. The operational cost was larger than the feature it served.

  • Flysystem 3 returns false less and throws more

    The filesystem abstraction moved from returning false on failure to throwing, and Laravel 9 wraps that in a setting rather than a change. Defaulting to the old behaviour…

  • Laravel 9 moved to Symfony 6 and took PHP 8 with it

    February, the first annual major, and a version number that means less than it used to. The work is two packages that block everything.

  • Elasticsearch 8 turns security on and removes types

    February, and a major that changes the default posture rather than the API. The cluster starts and nothing can connect to it.

  • An audit log that a lawyer could read

    A dispute, and a log that recorded that something changed. “Order updated” with no before, no after and no actor.

  • A foreign key is an index you did not have to name

    InnoDB requires an index on the referencing column and creates one silently if none exists, which is convenient and produces indexes nobody chose. The auto-created index is a…

  • Types are gone, four years after the deprecation

    Mapping types were deprecated in 6.0, made single-only in 7.0 and removed entirely in 8.0, which is an unusually long and well-signposted removal. The four-year runway means most…