Developer Guide
Extension Compatibility & Updater
Package delivery specifications, SHA-256 pre-verification, and atomic rollback.
Extension Compatibility & Updater
Encrypt CMS implements the Central License Server (CLS) authenticated package delivery specification for commercial add-ons and updates.
1. Extension Update Delivery Flow
When the administrator checks for updates under Admin > System > Updates:
- Discovery:
ExtensionUpdateServicequeries active extensions in/pluginsand/themes, inspecting declared versions inplugin.jsonandtheme.json. - Entitlement Handshake: The CMS dispatches an authenticated POST request to:
POST /api/v1/packages/{slug}/download Authorization: Bearer <InstallationToken> X-CMS-Domain: yourdomain.com - Single-Use Signed Token: If entitled, the server returns a temporary signed download URL and authoritative 64-character hexadecimal SHA-256 hash.
- Pre-Extraction Checksum Validation: The CMS downloads the package into an isolated temporary file in
storage/framework/and calculates its SHA-256 checksum. If the hash does not match, extraction immediately aborts and cleans up temporary files. - Atomic Backup & Extraction: Before overwriting any files,
BackupServicecreates a complete backup archive of the active version. If extraction or manifest verification fails, the previous version is restored automatically.
2. Decoupled Core vs. Extension Updaters
- Core Updates (
CoreUpdateService):- Managed exclusively by
CoreUpdateService. - Zero commercial license checks required.
- Download hosts are restricted strictly to the Central License Infrastructure and authorized package delivery distribution servers.
- Managed exclusively by
- Extension Updates (
ExtensionUpdateService):- Handles commercial and community themes and plugins.
- Core slugs (
encrypt-cms,encrypt-cms-core) are strictly blocked from extension updater routes to prevent privilege escalation.
3. Verified Extension Contract
Extensions compatible with the Encrypt CMS updater must adhere to the following:
- Semantic Versioning (SemVer 2.0.0, e.g.
1.0.5). - Strictly relative file paths within the ZIP archive.
- Manifest
entry_pointpointing to an executable PHP file (index.php). - Archive size strictly under 50 MB compressed, expanding to no more than 200 MB and 5,000 files.