Skip to content

馃尫 Morning Glory

Latest

Choose a tag to compare

@mychidarko mychidarko released this 15 Aug 10:20
· 3 commits to v5.x since this release

v5.0 - 15 Aug 2026

Added

  • A new routing engine: routes compile at registration instead of being regex-matched per request, exact routes match instantly from an index, and dynamic routes only check relevant candidates
  • Optional route parameters (/posts/{id?}) and inline constraints (/users/{id:[0-9]+})
  • Leaf Crash is the error engine: structured reports with frames, request context, breadcrumbs from your logs, views, queries and jobs, redaction, and a debug page in Leaf's design language
  • Named route groups cascade (admin.users.index), and resource routes name themselves
  • Router::reset() clears routes, hooks, middleware and cached request state for long-running processes and test suites
  • Environment reads are cached per request, making _env() dramatically faster; _envUncached() reads live when you genuinely need it

Fixed

  • Group middleware runs on dynamic routes: middleware like auth.required is no longer silently skipped for /{id}-style routes inside groups when a global middleware exists
  • Base path detection only strips URL prefixes when requests actually live under your script's folder, so php -S and CLI runs no longer 404

Changed

  • Raw regex routes no longer match: patterns without {} placeholders are literal paths. Rewrite with named parameters, optional parameters or inline constraints
  • Custom error handlers receive a single Leaf\Crash\Report instead of three whoops arguments
  • Exact routes always beat dynamic ones, regardless of registration order
  • Debug output follows APP_ENV: production shows clean error pages, development gets the full crash experience, no configuration
  • Async support is paused while Eien is rebuilt: $app->ws() and eien.enabled are removed
  • Leaf now requires PHP 8.2+