1.13.1
August 10th, 2026
Fixed
- Corrected
CHANGELOG.md. Every entry from v1.7.0 through v1.13.0 had been collapsed into a single dated[1.13.0]block instead of six separate versioned entries. Each tag's actual content is now documented separately with its real tag date. Per this project's policy of never amending a published tag, v1.13.1 exists specifically to ship this correction. No file undersrc/,config/,resources/, ortests/was modified in this release.
1.13.0
August 10th, 2026
Changed
- Asset URLs now include a cache-busting
vparameter.{{ cap:scripts }}and{{ cap:styles }}append?v=<version>derived from the installed version ofoliweb/laravel-cap(viaComposer\InstalledVersions). The WASM URL additionally carries?v=<filemtime>when the local file has been published. ETag values for JS and CSS responses are now the package version string instead of a per-requestmd5(). No breaking change. - WASM CDN fallback is now opt-in (potentially breaking). The default is now a 503 response if the local WASM has not been published, rather than a silent redirect to
cdn.jsdelivr.net. Enablewasm_cdn_fallback(viaCAP_WASM_CDN_FALLBACK=trueor the CP panel) or runphp artisan cap:publish-wasmto restore normal operation.
Added
- CP toggle for
cap_disabledin Statamic's form editor. A dedicated Cap tab exposes a Disable Cap toggle, persisted to the form's YAML by Statamic's native form persistence. - Per-form opt-out via
cap_disabled: truein the form YAML. InstructsValidateCapTokento exit immediately without a network call to/siteverify. Not a breaking change — absence of the key is treated asfalse(protected). - New
wasm_cdn_fallbacksetting (config key,CAP_WASM_CDN_FALLBACK, CP checkbox). - First test suite (
tests/): settings controller, YAML secret auto-purge,ValidateCapToken, andAssetController::wasm().
Security
- XSS:
JSON_HEX_*flags applied to alljson_encode()calls inCap.php(endpoint, token field, nonce, WASM URL interpolated into<script>blocks). - Cap endpoint restricted to HTTPS (
url:https) inSettingsController. Potentially breaking for HTTP-only dev setups. - Cap secret removed from the CP settings panel. Must be set via
CAP_SECRETin.envorconfig/cap.phpexclusively. ValidateCapTokennow builds its ownCapinstance with explicit config;secretsourced exclusively fromconfig('cap.secret').
Fixed
- README corrections: WASM fallback description was stale (v1.8.0 changed default to 503); German missing from the translations list.
SettingsController::update()no longer validates or persists asecretfield.ServiceProvider::loadSettingsFromYaml()auto-purges a residualsecretkey fromstatamic-cap.yamlon boot.
1.12.0
August 9th, 2026
Added
- CP toggle for
cap_disabledin Statamic's form editor. A dedicated Cap tab is now injected into the form editing screen viaForm::appendConfigFields(), exposing a Disable Cap toggle. Persisted automatically to the form's YAML file by Statamic's native form persistence — no custom route or controller required. This is a UI addition for a mechanism already introduced in v1.11.0: forms that were already usingcap_disabled: truein their YAML are unaffected. Manual YAML editing remains supported (useful for Git-managed form configurations).
1.11.0
August 9th, 2026
Added
- Per-form opt-out via
cap_disabled: truein the form YAML. Addingcap_disabled: trueas a top-level key inresources/forms/{handle}.yamlinstructsValidateCapTokento exit immediately without making any network request to Cap's/siteverifyendpoint. Useful for internal or admin forms that never render the Cap widget. Not a breaking change: forms that do not declare this key continue to be verified exactly as before — the absence ofcap_disabledis treated asfalse(protected). There is currently no corresponding checkbox in Statamic's CP form editor; the key must be set manually in YAML.
1.10.0
August 9th, 2026
Changed
- Asset URLs now include a cache-busting
vparameter.{{ cap:scripts }}and{{ cap:styles }}append?v=<version>derived from the installed version ofoliweb/laravel-cap(viaComposer\InstalledVersions). The WASM URL additionally carries?v=<filemtime>when the local file has been published, or no parameter when it is absent. ETag values for JS and CSS responses are now the package version string instead of a per-requestmd5()of the full file content, eliminating a redundant hash computation on every uncached request. The WASM ETag is now the file'sfilemtime. Together these changes ensure that acomposer update oliweb/laravel-capautomatically invalidates browser caches without any action required from the user. No breaking change — existing installations that have not published the WASM locally are unaffected; those that have will benefit from correct mtime-based cache invalidation.
1.9.0
August 9th, 2026
Security
JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOTapplied to alljson_encode()calls inCap.php. Values interpolated into inline<script>blocks (endpoint, token field name, nonce, WASM URL) are now unicode-escaped, preventing XSS injection if any of those values were to contain a raw<or&sequence.- Cap endpoint restricted to HTTPS in
SettingsController. Theendpointvalidation rule is nowurl:https(native Laravel 13 parameter syntax) instead of the permissiveurl. Potentially breaking: installations currently configured with an HTTP endpoint — including local development environments — will receive a validation error when saving settings until the endpoint is updated to HTTPS. This restriction is intentional: the CP settings panel is a production surface and, unlikelaravel-capwhich tolerates HTTP for development,statamic-capenforces HTTPS unconditionally.
1.8.0
August 9th, 2026
Changed
- WASM CDN fallback is now opt-in (potentially breaking). Previously, if the local WASM file had not been published via
php artisan cap:publish-wasm, the addon silently redirected tocdn.jsdelivr.net. This behaviour has changed: the default is now a 503 response with an explicit log warning, rather than an invisible dependency on an external CDN. Existing installations that relied on the silent CDN fallback without having published the WASM locally will receive 503 errors on the WASM route until they either runphp artisan cap:publish-wasmor explicitly enablewasm_cdn_fallback(viaCAP_WASM_CDN_FALLBACK=trueor the CP settings panel).
Added
- New
wasm_cdn_fallbacksetting (config key, env variableCAP_WASM_CDN_FALLBACK, CP checkbox). When enabled, the addon falls back tocdn.jsdelivr.netfor the WASM asset if the local file is absent. Disabled by default. - Unit tests for
AssetController::wasm()covering: local WASM served regardless of fallback setting, 503 on missing local WASM with fallback disabled, CDN redirect with fallback enabled, 404 when fallback is enabled but no CDN URL found in the widget JS.
1.7.0
August 9th, 2026
Security
- Removed Cap secret from the CP settings panel. The secret field has been removed from the settings view. The secret must now be configured exclusively via
CAP_SECRETin.envor through the publishedoliweb/laravel-capconfiguration — never from the Statamic control panel. ValidateCapTokennow builds its ownCapinstance with an explicit config instead of relying on theLaravelCap\Facades\Capsingleton. Thesecretkey is sourced exclusively fromconfig('cap.secret'), ensuringstatamic-capnever stores or reads the secret.
Fixed
SettingsController::update()no longer validates or persists asecretfield. Even if asecretkey is present in the submitted request, it is explicitly removed from$databefore writing the YAML file.ServiceProvider::loadSettingsFromYaml()automatically purges a residualsecretkey found instorage/statamic/addons/statamic-cap.yaml(left over from installations prior to this fix). The file is rewritten without the key immediately after detection. If the file cannot be rewritten, aLog::warning()is emitted and the application continues booting normally — the secret is never merged intoconfig('statamic-cap', ...)in either case.
Added
- First test suite for the package (
tests/). BaseTestCaseextendingStatamic\Testing\AddonTestCase. Unit tests covering: CP settings controller, YAML secret auto-purge on boot, andValidateCapTokenlistener (valid/invalid token, correct endpoint and secret sourcing,fail_openbehaviour). CI via GitHub Actions on PHP 8.2–8.5.
1.6.4
May 14th, 2026
- N/A Changelog not available.
1.6.3
May 14th, 2026
- N/A Changelog not available.