Releases: lateritecmf/laterite
Releases · lateritecmf/laterite
Release list
Laterite 0.3.0
Breaking
- Applications boot through
laterite_admin::Bootstrapwith aModuleRegistryof
Moduleimplementations;routertakes the module contributions, an
AdminConfig, and the catalog store. AdminConfig,AppMeta, andBackendConfigare#[non_exhaustive]: build one
withDefaultand set fields. Struct literals no longer compile outside the
framework, and a field added in a later release is additive.- Descriptor labels (lists, forms, resources, settings items, permissions) are
Textvalues built with thet!macro; a bareStringno longer compiles.
Added
- Module system: the
Moduletrait with bundled migrations run in dependency
order, a registrationRegistryfor descriptors and hooks, and database
capability declarations checked at boot. - Plugin platform:
plugins/<author>/<plugin>discovery with a generated manifest
(lat plugin sync), enable and disable from config and the admin, and boot
isolation with quarantine and a crash-loop journal. - Localization: the deferred
Textvalue witht!,tn!, andtp!; a
per-request translator resolving the operator preference,Accept-Language,
andapp.locale; a language picker; PO catalogs contributed by modules; the
xxpseudo-locale; localized dates; andlat i18n extract,check,update,
andstatus. - Audit log: an append-only record of every privilege and data mutation, with a
read-only view under System behindbackend.view_audit_log. - Admin sessions with layered CSRF protection and dismissible flash toasts.
- A validation engine with typed rules (required, length, email, url, unique) and
per-field errors re-rendered with a 422. - Typed admin errors with styled pages, logged through
tracing;app.debug
shows the cause. - Field types as an open registry with a view-model render seam: text input types
(email, tel, number, url with a copy button), select, and a reference picker
with a searchable combobox; form writes delegated to registered persisters; a
ColumnTyperegistry for list cells. - Admin assets: htmx, a
laterite.jswidget lifecycle, and an open asset registry
with per-page widget assets. - CLI:
lat serve,lat domainfor local wildcard domains, and
lat make:migration. - Config:
server.listen,app.url,app.locale,app.debug, and
backend.pathto relocate the admin panel. - Core helpers:
insert_returning_id_onfor transactional inserts,
AnyRowExt::get_int, andlike_escape.
Fixed
- Absent form values persist correctly, and the migration scaffold declares its
primary key. - Form field options resolve once at router build.
- Locale names and date formatting assume no particular language; the admin's
locale set is the loaded catalogs.
Security
- A resource with a create or edit form must declare a permission; boot aborts
otherwise. - The reference-picker search escapes LIKE wildcards.