Skip to main content
Version: Next 🚧

Release Notes

Versioning Scheme

Apiato and its other first-party packages follow Semantic Versioning. Major framework releases are released every year (~Q1), while minor and patch releases may be released as often as every week. Minor and patch releases should never contain breaking changes.

When referencing the Apiato framework or its components from your application or package, you should always use a version constraint such as ^12.0, since major releases of Apiato do include breaking changes. However, we strive to always ensure you may update to a new major release in one day or less.

Support Policy

For all Apiato releases, bug fixes are provided for 18 months and security fixes are provided for 2 years.

VersionPHP (*)ReleaseBug Fixes UntilSecurity Fixes Until
107.3 - 8.1April 25th, 2021October 25th, 2022April 25th, 2023
118.0 - 8.2April 27th, 2022October 27th, 2023April 27th, 2024
128.1 - 8.2June 4th, 2023December 4th, 2024June 4th, 2025
138.2Q1 2024August 5th, 2025February 3rd, 2026

(*) Supported PHP versions

Apiato 12

Full Changelog:

PHP 8.1

Apiato 12.x requires a minimum PHP version of 8.1.

Breaking Changes

  • Upgraded to Laravel v10 (All Laravel files (e.g. configs, .env, etc...) are now synced with the latest Laravel changes)
  • Updated Composer dependencies to their latest version
  • Laravel Passport route registration & customization has changed. Passport routes are now reside in a dedicated route file (Instead of registering them in the provider).
  • Middleware $routeMiddleware field is renamed to $middlewareAliases
  • Trimmed down the TestCase by removing some useless traits including:
  • encode() method return value has changed -> In case of unencodable value (e.g. null), now returns null instead of ''
  • decode() method return value has changed -> In case of undecodable value (e.g. null), now returns null instead of []
  • StateKeeperTrait is removed from Request

None Breaking Changes

  • Everything is refactored to use constructor injection instead of directly using the Service Container like so app(CreateUserByCredentialsTask::class)->run()
  • Added more tests and refactored the rest
  • Switched to invokable controllers
\\ from
Route::get('profile', [GetAuthenticatedUserController::class, 'getAuthenticatedUser']);
\\ to
Route::get('profile', GetAuthenticatedUserController::class);
  • All rotues are moved into the private documentation. e.g. RefreshProxyForWebClient.v1.public.php -> RefreshProxyForWebClient.v1.private.php
  • Added some getter methods to the Request including:
  • Added a TestAssertionHelperTrait to the TestCase which provides some usefull assertions

Bug Fixes

  • withMeta() method on ResponseTrait now correctly includes added meta data
  • Calling invokable controllers from routes #174
  • Exception when try to generate an WEB CRUD Controller from generator #171
  • PHP 8.1 warning on passing null to explode #176