# CPalius CMF 2.2.1

**Released:** 2026-09-23 · **Channel:** stable · **Critical:** no

Turkish: [2.2.1-tr.md](2.2.1-tr.md)

2.2.0 shipped a new Studio rebuild page whose JavaScript lived only as an
AssetMapper hash. The release zip is a git snapshot; `public/assets/` is
gitignored, so the hashed file never arrived and the buttons did nothing.
This patch compiles the importmap after every zip, patch and `cp:update`,
and serves the rebuild runner from `/js/studio-rebuild.js`.

## What's new

**Updates compile frontend assets.** After files land, `asset-map:compile`
writes importmap hashes into `public/assets/`. WordPress ships built JS in
the package; this is the equivalent step on the live tree.

**AACP asset rebuild dumps the importmap, not only Tailwind.**

**Rebuild buttons no longer depend on a compile.** The runner is a static
file at `/js/studio-rebuild.js`, so a zip works before the dump finishes.

**`asset()` is a Twig alias of `cp_asset()`.** Unknown paths become
root-relative URLs. A missing Symfony Asset component no longer 500s the
page.

## Upgrade notes

**If 2.2.0 already 500s the rebuild page** with `Unknown function "asset"`,
this update replaces that call. Empty `cp-core/var/cache/prod/` after
the files land (leave the folder).

**If you deploy by FTP rather than through the panel,** clear
`cp-core/var/cache/prod/` after uploading — leave the folder, empty its
contents. Then open AACP → Rebuild assets once, or run
`php cp-core/bin/console asset-map:compile`.

## Known limits

**Shared hosts without a PHP CLI** cannot run `asset-map:compile` in-process.
The rebuild page still works via `/js/studio-rebuild.js`. Other new
importmap entrypoints need a CLI compile or the next host that has one.
