noerd/cms
| Install | |
|---|---|
composer require noerd/cms |
|
| Latest Version: | v0.4.2 |
| PHP: | ^8.3 |
| Laravel: | 12 · 13 |
| License: | MIT |
| Last Updated: | Oct 25, 2026 |
| Links: | GitHub · Packagist |
noerd/cms
Multi-tenant, multilingual CMS for Laravel Livewire. Provides content management with a visual element builder for pages and custom collections.
Installation
composer require noerd/cms
php artisan noerd:install-cms
Configuration
noerd:install-cms publishes config/noerd_cms.php (also available through
php artisan vendor:publish --tag=cms-config; noerd:update-cms publishes it
when missing):
return [
'website_url' => env('CMS_WEBSITE_URL', ''),
'page_elements_path' => env('CMS_PAGE_ELEMENTS_PATH'),
'layout_path' => env('CMS_LAYOUT_PATH', 'app-modules/website/resources/views/components/layouts'),
'collection_field_types' => [/* type => label */],
];
Set CMS_WEBSITE_URL in .env for live-preview links; CMS_PAGE_ELEMENTS_PATH
optionally adds an extra page-element directory; CMS_LAYOUT_PATH points the
page editor at the frontend layouts; collection_field_types lists the field
types a collection definition may use.
Element Collections
Repeater-style fields are managed as element collections: hidden
collections owned by either a page entry (page_id) or a single element
instance (element_page_id). Each owner+field pair maps to one collection
via a deterministic key (ELEMENT_{ownerId}_{FIELD} or
ELEMENT_EP_{elementPageId}_{FIELD}).
Use the field type element-collection in any element or detail YAML:
fields:
- name: detailData.items
label: Items
type: element-collection
colspan: 12
fields:
- name: title
label: Title
type: translatableText
colspan: 6
- name: description
label: Description
type: translatableTextarea
colspan: 12
Rows are edited in a nested modal (cms::element-collection-row-detail).
At render time, HandlesPageElements::processPageElements() merges row data
back into the owner's data under owner_field, so element Blade templates
can iterate the field directly:
@foreach(($element->items ?? []) as $item)
<h4>{{ $item['title'] ?? '' }}</h4>
<p>{{ $item['description'] ?? '' }}</p>
@endforeach
Related Packages
In-app notifications for the noerd framework: a bell in the top bar with an unre...
Multi-tenant CMS foundation with Teams support, Livewire components and Filament...
The visual layout and widget composition engine for Capell CMS — content-first a...
A lightweight Laravel CMS package for rapidly building admin dashboards with min...
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v0.4.2 | ^8.3 | ^12.0 || | MIT | |
| v0.4.1 | ^8.3 | ^12.0 || | MIT | |
| v0.4.0 | ^8.3 | ^12.0 || | MIT | |
| v0.3.0 | ^8.3 | ^12.0 || | MIT | |
| v0.2.7 | ^8.3 | ^12.0 || | MIT | |
| v0.2.6 | ^8.3 | ^12.0 || | MIT | |
| v0.2.5 | ^8.3 | ^12.0 || | MIT | |
| v0.2.4 | ^8.3 | ^12.0 || | MIT | |
| v0.2.3 | ^8.3 | ^12.0 || | MIT | |
| v0.2.2 | ^8.3 | ^12.0 || | MIT | |
| v0.2.1 | ^8.3 | ^12.0 || | MIT | |
| v0.2.0 | ^8.3 | ^12.0 || | MIT | |
| v0.1.5 | ^12.0 || | proprietary | ||
| v0.1.4 | ^12.0 || | proprietary | ||
| v0.1.3 | ^12.0 || | proprietary | ||
| v0.1.2 | ^12.0 || | proprietary | ||
| v0.1.1 | ^12.0 || | proprietary | ||
| v0.1.0 | ^12.0 || | proprietary |