v0.31.0
1 November 2026
An addon is mounted by a page with its view, and API clients get JSON errors, a JSON body reader and bearer tokens.
Changed
- The
addons.{id}.mountconfig key is removed. Create a page, at any slug, whose view is exactly@aliasto mount an addon. The addon's own sub-pages, such as the admin's edit and system pages, are served beneath that page. - An addon that sets
"automount": truein its_index.jsonis still served at/@alias, and the addon owns every URL under it. - A request with
Accept: application/jsongets{"error": message}instead of the error template.
Added
App::mountOf($alias)returns the slug of the page that mounts an addon, ornull.Registry::mountOf($view)is the unscoped lookup behind it.Request::json()returns the request body decoded as an array,Request::bearer()the bearer token from theAuthorizationheader, andRequest::acceptsJson()whether the client asked for JSON.PageImage::palette($count)returns the most common colors of an image as#rrggbb, andPageImage::color()the most common one.UnauthorizedException(401).
Removed
phlat addons:mount. Create the page in the admin or withphlat make:page admin --view=@admin.AddonRegistry::mountFor()andAddonRegistry::all().