# Latest features: platform and extensibility

> What's new for developers and integrators — generated record classes and schemas, prepared statements, exceptions instead of a silent false, and the new customization hooks.

Source: CBX documentation, version 4.0 preview (unreleased). Canonical page: https://docs.configbox.at/docs/4.0-preview/features/latest/platform-and-extensibility. Last updated 2026-08-25.

---
**The part that decides whether a customized store is still updatable in three years.** Two threads
here: the core got harder to get wrong (generated types, prepared statements, exceptions instead of
silent `false`), and the customization layer got more places to hook into without forking anything.

← [Back to Latest features](https://docs.configbox.at/docs/4.0-preview/features/latest/)

---

## One application, three hosts — still true, and now proven per surface

The same CBX runs inside Joomla, WordPress and Magento 2: same admin screens, same data model, same
release. What is new is how far that parity is carried — the [CLI suite](https://docs.configbox.at/docs/4.0-preview/features/latest/cli) is the same suite on
all three, the [MCP server](https://docs.configbox.at/docs/4.0-preview/features/latest/mcp-server) runs on all three, and the platform guides say where each
host genuinely differs rather than leaving it to be discovered.

- [Joomla](https://docs.configbox.at/docs/4.0-preview/platform/joomla/joomla_platform_guide) ·
  [WordPress](https://docs.configbox.at/docs/4.0-preview/platform/wordpress/wordpress_platform_guide) ·
  [Magento 2](https://docs.configbox.at/docs/4.0-preview/platform/magento2/magento2_platform_guide)
- [Joomla SEF routing](https://docs.configbox.at/docs/4.0-preview/platform/joomla/sef_urls) ·
  [CBX on Magento 2, for operators](https://docs.configbox.at/docs/4.0-preview/admin-guide/magento2/)

## Records and schemas that cannot drift from the models

CBX generates, from each model's property definitions, a **PHP record class** and a **JSON schema** per
entity — in a single pass, so the two cannot disagree — plus TypeScript types. That is what gives an
editor autocompletion on a record that is otherwise a plain `stdClass`, and what lets the
[OpenAPI document](https://docs.configbox.at/docs/4.0-preview/features/latest/http-api) and the [MCP tool schemas](https://docs.configbox.at/docs/4.0-preview/features/latest/mcp-server) describe the real fields
rather than a hand-maintained approximation of them.

`configbox:generate-types --check` fails on drift, so CI can hold the line.

- [Type generation](https://docs.configbox.at/docs/4.0-preview/technical/type_generation#2-one-artifact-set-committed-customization-baked-in)
- [Property definition settings — storage, validation, and the keys they get confused with](https://docs.configbox.at/docs/4.0-preview/technical/property_definition_settings)
- [The property types, one article each](https://docs.configbox.at/docs/4.0-preview/technical/property-types/)

## Prepared statements

`KenedoDatabase` gained a real mysqli prepared-statement path with named or positional placeholders and
IN-list expansion. It is the **sanctioned path for new queries**; the historic string-built queries stay
as they are, because half-converting a query is worse than either end state.

- [KenedoDatabase: the prepared path, and when to use which](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_database#3-prepared-statements--setpreparedquery-253)

## Refusals became exceptions

CBX used to report a refusal by returning `false` and parking a sentence in `setError()`. That protocol
is retired in favour of exceptions — which matters to customization code specifically: a custom
property type or model that still returns `false` keeps working, but one that throws nothing and
reports nothing will **silently accept bad data**. Read the first section of the guide if you maintain
anything in the customization layer.

- [Errors are exceptions now — what customization code has to change](https://docs.configbox.at/docs/4.0-preview/migration-to-cb4/exceptions-and-validation)
- [The breaking-changes log](https://docs.configbox.at/docs/4.0-preview/migration-to-cb4/breaking-changes-log) ·
  [the AI cheatsheet](https://docs.configbox.at/docs/4.0-preview/migration-to-cb4/CHEATSHEET)

## The customization layer, extended

This is the feature that keeps customized CBX stores updatable for years: one directory that updates
never touch. What it can now hold:

| Extend | Guide |
|---|---|
| Templates, views, controllers, models | [views & templates](https://docs.configbox.at/docs/4.0-preview/customization/overriding_views_and_templates) · [controllers & models](https://docs.configbox.at/docs/4.0-preview/customization/overriding_controllers_and_models) |
| Fields on stock models | [extending stock models](https://docs.configbox.at/docs/4.0-preview/customization/extending_stock_models) · [custom properties](https://docs.configbox.at/docs/4.0-preview/customization/custom_properties) |
| A new kind of question | [custom question types](https://docs.configbox.at/docs/4.0-preview/customization/custom_question_types) · [and making them legible to AI](https://docs.configbox.at/docs/4.0-preview/customization/question_types_and_ai) |
| A new rule condition | [custom rule conditions](https://docs.configbox.at/docs/4.0-preview/customization/custom_rule_conditions) |
| A new calculation building block | [custom calc term types](https://docs.configbox.at/docs/4.0-preview/customization/custom_calc_term_types) |
| A payment provider | [payment connectors](https://docs.configbox.at/docs/4.0-preview/customization/payment_connectors) |
| **Site-specific CLI commands** | [custom CLI commands](https://docs.configbox.at/docs/4.0-preview/customization/custom_cli_commands) |
| The admin's on-screen help | [help customization](https://docs.configbox.at/docs/4.0-preview/customization/help_customization) |
| Behaviour at defined points | [events & observers](https://docs.configbox.at/docs/4.0-preview/customization/events_and_observers) · [system overrides & boot hooks](https://docs.configbox.at/docs/4.0-preview/customization/system_overrides_and_boot_hooks) |
| Frontend JS/CSS | [assets & AMD](https://docs.configbox.at/docs/4.0-preview/customization/assets_and_amd) |
| Wording | [language overrides](https://docs.configbox.at/docs/4.0-preview/customization/language_overrides) |

- [Start here: the customization overview](https://docs.configbox.at/docs/4.0-preview/customization/customization_overview)
- [The deep-dive feature article on the layer](https://docs.configbox.at/docs/4.0-preview/features/customization-layer)

## Customizations get their own migration track

A customization can ship versioned, idempotent update scripts of its own, applied on the same
freeze-on-failure terms as the core track — and `configbox:migrate --status` and
`configbox:migrate:unblock` both understand the distinction.

- [Migrations, core and customization tracks](https://docs.configbox.at/docs/4.0-preview/technical/migrations)

## A heads-up for anyone with admin-UI customizations

The upcoming major release modernizes the admin form and list markup, CSS and JavaScript, and
**deliberately introduces breaking changes** to the admin HTML structure and class names. There is a
guide that says exactly what changed and how to amend custom CSS, custom admin JS and overridden
backend templates. Read it before that release, not after.

- [Admin UI migration guide](https://docs.configbox.at/docs/4.0-preview/customization/admin_ui_migration)

## For anyone automating CBX

Views announce their own readiness (`view-init-done`, and the `cbViewInitialized` event) at the point
their handlers exist, not when the markup appeared — which removes a whole family of intermittent
failures from browser automation. The marker was renamed from `view-processed` on 2026-08-16 because
the old name invited exactly the wrong reading.

- [View attributes and the readiness markers](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_view#51-the-wrapper-carries-the-manifest--getviewattributes-906)
- [The AMD loader](https://docs.configbox.at/docs/4.0-preview/customization/assets_and_amd)
- [How the storefront talks to the server](https://docs.configbox.at/docs/4.0-preview/technical/frontend_requests)

## The framework itself

- [Kenedo MVC: lifecycle, tasks, properties](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_mvc)
- [KenedoController](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_controller) ·
  [KenedoModel](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_model) ·
  [KenedoView](https://docs.configbox.at/docs/4.0-preview/technical/kenedo_view)
- [Every MVC task, including the recursive copy](https://docs.configbox.at/docs/4.0-preview/technical/mvc_tasks)
- [Host-adaptation stylesheets](https://docs.configbox.at/docs/4.0-preview/technical/host_stylesheets)

---

*[Back to Latest features](https://docs.configbox.at/docs/4.0-preview/features/latest/) · [the Features track](https://docs.configbox.at/docs/4.0-preview/features/)*
