Skip to content

Artisan Commands ​

Every command in the stack lives under the ui5: namespace. Core ships the generators — the commands that write files — and the SDK ships the operators: the ones that move metadata into the database, compile help, cache the registry, and answer questions about a running installation.

php artisan list ui5 shows what your installation actually has; php artisan help ui5:sync shows a command's own text, which is kept current in the code.

The SDK's commands ​

CommandWhat it does
ui5:intakeCreates the platform-owner organisation — the system actor. Runs before the first ui5:sync.
ui5:syncPersists the registry into the database: artifacts, slots, settings, abilities, roles, Customizing catalogs — then a conformance pass. Idempotent.
ui5:cacheCompiles the registry into a fast runtime cache file.
ui5:navCompiles the navigation tree into a cache file.
ui5:helpThe help compiler: validate, build HTML, build the search index.
ui5:docScaffolds a new help document with a fresh UUID.
ui5:publishCopies the SDK's shipped assets into public/sdk.
ui5:i18nExpands the i18n keys of synced Customizing catalogs into a properties bundle.
ui5:explainExplains ability resolution for one partner in one app, with sources.
ui5:conceptInspects the LUX Weave Concept graph.
ui5:describePublishes the marketplace descriptor into composer.json.
ui5:slotInspects the slot catalog. Overrides Core's ui5:slot, adding the actor overrides.

The ones with options worth knowing ​

ui5:sync {--dry} — the pipeline that turns declarations into rows. Seven workers run in a fixed order (artifacts, slots, settings, abilities, roles, Customizing, then a value-help scope conformance check), --dry reports every insert, update and delete without writing, and the workers are idempotent, so running it twice changes nothing the second time. See the sync pipeline.

ui5:help — five flags, and the important one is the combination:

--validate   check every declared help document (the default when no flag is given)
--build      compile the HTML into the storage cache
--index      build the Lunr full-text index
--all        all four in one run — including the deprecated --cache
--cache      deprecated; writes a manifest nothing reads, removed in 2.0

A bare ui5:help only validates — it produces no output files. Deployments run ui5:help --all. The build pipeline page carries the full diagnostics table, including what passes in silence.

ui5:explain --app= --partner= --at= — the debugging tool for "why can this person not press that button". It resolves the actor's abilities the way the runtime does and shows where each grant came from: which role or group, which assignment row, and its validity window. --at accepts a datetime, so you can ask the question as of last Tuesday. See the Explain CLI.

ui5:doc {module} {title} {--locale=en} — writes ui5/{module}/doc/{uuid}/{locale}.md with a fresh UUID and frontmatter. The UUID is the identity; never change it after publishing. See authoring help.

ui5:intake — eleven options describing one organisation (--name, --email, --vat, --office, --founded, …). --email is the idempotency key, so re-running with the same address updates rather than duplicates; --force skips the confirmation. Full walkthrough on the system actor page.

ui5:describe {--check} {--package=} — reads the marketplace attributes off your module and writes them into composer.json's extra.laravelui5. --check verifies without writing and exits non-zero on drift, which is what you put in CI.

ui5:publish {--force} — a dumb copy of the package's resources/assets into public/sdk. It prompts unless --force, which is what a deploy script passes. It publishes assets, not stubs — see stubs and scaffolding.

ui5:slot {name?} — with no argument, the whole slot catalog; with a name, that slot's resolution chain plus the per-partner actor overrides Core cannot know about. See actor slot values.

Core's commands, which you also have ​

These ship with laravelui5/core and generate files. They behave identically with or without the SDK installed — with one exception, noted below.

CommandGenerates
ui5:appA Ui5App module from a UI5 frontend project
ui5:libA Ui5Library module from a UI5 library project
ui5:actionAn action class and its handler
ui5:cardA card, its provider and its manifest template
ui5:tileA tile
ui5:chartA chart
ui5:reportA report
ui5:dashboardA dashboard
ui5:groupA dashboard group
ui5:resourceA resource
ui5:wireA view + controller floorplan for a model
ui5:assembleA self-contained app from a blueprint
ui5:slot(replaced by the SDK's version)

The one exception is ui5:action. With the SDK installed it generates a typed handler that implements SdkActionHandlerInterface instead of Core's array-returning shape. Nothing else changes — the SDK swaps one scaffolder and hands every other artifact type back to Core's default.

Always scaffold, never hand-write

Artifact classes carry constants, attributes and a manifest wiring that the generators get right and hand-authoring gets subtly wrong. ui5:app --refresh in particular overwrites the generated resources, so a manifest you edited by hand is lost on the next refresh. Edit the source project, then regenerate.

The order that matters ​

Two sequences are worth memorising, because getting them wrong produces confusing rather than loud failures.

First install:

bash
php artisan migrate
php artisan ui5:intake --name="…" --email="…"   # the system actor must exist first
php artisan ui5:sync                            # stamps it as set_by on seeded rows
php artisan ui5:help --all

Every deploy:

bash
php artisan migrate --force
php artisan ui5:sync
php artisan ui5:cache        # after sync — it bakes the ability ids sync just assigned
php artisan ui5:nav
php artisan ui5:help --all
php artisan ui5:publish --force

Sync before the caches, always: the caches compile what sync has just written. Caching and performance explains what each cache holds — including the one standing caveat about which registry to keep bound in production.