Define your application's structure as POPOs (Poor Old PHP Objects) with a handful of PHP attributes. Core reflects, registers, and serves it. Routes, manifests, OData services, launchpad tiles, slot-bound parameters. Your code becomes the source of truth.
Past 1.0 on strict SemVer. Runs standalone — the SDK is an upsell, not a prerequisite.
The codebase knows everything. But it can't describe itself.
Core changes that.
Your artifacts are plain PHP objects implementing Core's contracts, with attributes carrying the declarative overlay. Core reflects over them, validates consistency, and builds a deterministic registry. No YAML. No hand-written manifests.
Modules, apps, libraries, resources, cards, reports, tiles, charts, dashboards, actions. Every building block is a registered artifact with a globally unique namespace. Discoverable, queryable, composable.
Routes generate from artifact declarations. Manifests are assembled server-side, so the UI5 app never drifts from the Laravel app. You describe; Core wires.
Every application is an OData v4 service. $metadata, the read surface, and the CSRF-token handshake come with the app. Declare entity sets in PHP and the service exposes them. Writes go through Ui5Actions.
A dashboard aggregates groups; a group names the tiles, cards and charts it renders. The composition is declared in PHP and served as a JSON control tree — and groups can be contributed across module boundaries.
A report is a Blade template that receives an array and emits HTML. It owns its layout, its CSS, its print rules. No selection screen to build, no column metadata to declare, no export pipeline to configure.
Artifacts declare the parameters they need with #[Slot]. Core resolves each one through a fixed chain — request, composition, setting, default — so the same report or chart works embedded, standalone, or driven by a filter bar.
LaravelUi5.call invokes actions and seals Laravel validation errors back onto the form model. dispatchIntent opens artifacts by namespace. exportTable renders server-side. The JS ships with Core.
Core runs standalone, past 1.0 and under strict SemVer, so you can pin to it. Use Core to structure your application, then decide later whether the SDK's runtime — identity, tenancy, RBAC, the shell — adds value.
Top-level feature container
User-facing application within a module
Shared UI5 library
Integration card for overviews
Server-rendered HTML document, parameterised by slots
Single-value tile with status or navigation
Server-computed visualization in a dashboard group
Composition root, served as a UI5 control tree
Composes tiles, cards and charts into a section
Backend operation bound to entity or module
Read-only structured data endpoint
Global invokable view/controller pair
Provider-owned search help, opened by namespace
Most frameworks ask you to configure behavior. Core asks you to describe structure.
The difference is fundamental:
Core's metadata engine makes your code the source of truth. Routes, manifests, OData services, dashboard compositions. They're all consequences of what you've described, not things you've wired by hand.
The docs, the API reference and the video course are open to everyone. A free account gives you what composer require laravelui5/core asks for: a named installation, its Composer token for production, staging and development — plus the invite to the monthly office hour. Production use is included. No credit card. No trial period.