Skip to content

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 12:50
de33e3f

0.11.0 (2026-06-12)

⚠ BREAKING CHANGES

  • emitter: generated controller method names and route names change for every clean RESTful operation (e.g. getPetById becomes show, the route name follows). Regenerate your output; the drift gate (openapi:check) shows the full change. Users who ran openapi:scaffold must rename the overridden methods in their concrete controllers to match the new abstract signatures (PHP fatals at class load otherwise), and route('...') call sites must follow the new route names. The --laravel-conventions and --no-laravel-conventions flags are removed (artisan rejects them, the standalone binary ignores unknown flags), and a controllers.laravel_conventions key in openapi-laravel.json is now rejected as unknown.
  • emitter: generated Data classes and enums solely owned by one tag group now land in per-tag subdirectories with namespaces following the directories (data/Pet/PetData.php under App\Data\Pet). Regenerate your output and update imports in hand-written code; the drift gate (openapi:check) shows the full change. The --group-by-tag and --no-group-by-tag flags are removed (artisan rejects them, the standalone binary ignores unknown flags), and an output.group_by_tag key in openapi-laravel.json is now rejected as unknown.

Features

  • console: add openapi:scaffold for one-time concrete controller stubs (#78) (fcc4541)
  • console: add repeatable --exclude-path-prefix subset filter (#96) (1b31da3)
  • console: warn on every silent degradation to mixed or Request (#67) (bbea22f)
  • emitter: configurable controller base class plus validation extension pattern (#83) (68a92a5)
  • emitter: emit array-count rules from minProperties/maxProperties (#72) (b5f7b01)
  • emitter: emit per-index rules for tuple prefixItems (#82) (381f47b)
  • emitter: emit required_with rules from dependentRequired (#81) (ee3eb4f)
  • emitter: honor spec response status codes in the generated scaffold (#64) (78375db)
  • emitter: Laravel-convention controller method names become the only naming (8594410)
  • emitter: make empty generated Data classes visible with a marker and warning (#95) (6c08721)
  • emitter: map security schemes to route middleware (#77) (d371ef5)
  • emitter: opt-in Laravel-convention controller method names (#94) (81ef4e4)
  • emitter: opt-in tag-grouped data directory layout (#93) (dade3a0)
  • emitter: route names from operationId and route group config (#71) (b4003b5)
  • emitter: synthesize typed Data classes for inline JSON request bodies (#76) (4de4524)
  • emitter: tag-grouped data layout becomes the only layout (1197f6d)
  • emitter: typed and validated query parameters via per-operation QueryData classes (#63) (#99) (6754bd7)
  • emitter: typed multipart bodies with UploadedFile rules (#75) (a93b149)
  • parser: exact OpenAPI version gating with loud 3.2 best-effort warnings (#103) (6f255ef)
  • support Laravel 13 (#68) (644bd00)

Bug Fixes

  • ci: raise the laravel/pint floor to ^1.16.1 so prefer-lowest passes the generated-output gates (#91) (a778796)
  • deps: raise minimum spatie/laravel-data to ^4.23 for dependentRequired rules on lowest deps (f7c36be)
  • emitter: allow patternProperties keys under closed-object enforcement (#65) (c0f3651)
  • emitter: generate query classes independent of scaffold flags plus review follow-ups (#63) (458ad74)
  • emitter: merge PathItem-level parameters and resolve parameter refs (#66) (#85) (0363d6d)
  • tests: create parent dirs for grouped output in corpus gates (bdb4c22)

Miscellaneous Chores

  • declare the PHP class API internal (#69) (76da32e)
  • deps: explicit symfony/yaml require, drop ext-ctype (ae6b1c0)
  • e2e: regenerate backend for grouped layout and convention naming (e7e45d0)
  • packaging and platform hygiene for 1.0 (#74) (ed8da68)