v0.41.0
Latest release3 November 2026
Installed addons move to site/addons/{creator}/{name}, and a kept page or region is shared as widely as what it read about the visitor allows, so per is gone.
Added
phlat addons:listlists every addon on disk, built-in, site-only and installed, with whether it is configured and the tag an installed one is pinned to.phlat addons:installandaddons:resetaccept a full git URL as well ascreator/name. Thecreator/nameform resolves against theaddons.sourceconfig key, which defaults tossh://[email protected].addons:installrefuses an addon whose alias is already used by another addon, and the creatorsphlatandsite.edgein a view'scachesetting ({"cache": {"ttl": 86400, "edge": true}}) lets a shared cache in front of the site hold the kept page. Signed-out visitors are sentpublic, max-age=0, s-maxage=N.Options::chosen()says whether the visitor has chosen any declared option.Cache::LEVELSlists the levels an entry is shared at:none,roleanduser.deploy.phprunsgit submodule update --init --recursiveafterdeploy:update_code, so installed addons arrive with a release.
Changed
- An installed addon lives at
site/addons/{creator}/{name}/, notaddons/{creator}/{name}/at the project root. Its id inaddons.{id}config is unchanged.AddonManagerresolves each id to one fixed location. - A kept page,
{cache},{fragment}and{component}entry is shared as widely as its render allows: everyone when it asked nothing about the visitor, each role when it askedrole(),can()orisLoggedIn(), each user when it asked who they are. A signed-out visitor'suser(),role()andisLoggedIn()now count as role reads. Cache::setVaried()andCache::setFor()take a$levelfromCache::LEVELSin place of$per.Cache::getVaried()andCache::getFor()take noper.App::unkeepable()is nowApp::cacheLevel()and returns the level, ornullfor a render that read the session.- The cache schema is bumped, so the fragment cache is emptied once on upgrade.
phlat cache:clearflushes the fragment cache first, socache.flush:afterfires before the files go.addons:uninstallandaddons:resetwork whensite/sits inside a larger git repo.
Removed
peron{cache},{fragment}and{component}and on a view'scachesetting, andCache::per()andPageView::per(). A leftoverperthrows.addons/at the project root, in.gitignoreand in.gitattributes.