Help Surface
Help in LaravelUi5 is not a link to a manual. It is bound in the view, to the thing it explains, and the shell shows it where the user is: a small indicator beside the control, F1 on whatever has focus, and a viewer with a search over every help document the installation ships.
The authoring side — writing the documents, compiling them, the UUID keys — belongs to the Help System. This page is the runtime: how a view asks for help, and what the shell does with the request.

Binding help to a control
Wrap what you want explained in the Context control and give it the help document's UUID:
<mvc:View xmlns:lux="com.laravelui5.core" xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc">
<lux:Context uuid="7b0b6a7e-1c4b-4b1e-9f1a-2f5f3a9d8e10">
<Table id="rolesTable">
<!-- … -->
</Table>
</lux:Context>
</mvc:View>Two properties:
| Property | Default | |
|---|---|---|
uuid | — | the help document's UUID. Bind it (uuid="{help_uuid}") or write it literally |
showIndicator | true | renders the small help icon next to the content; set false to keep F1 without the icon |
The control renders a wrapper around your content, stamps the UUID onto it as a data attribute, and — if the indicator is on — a clickable icon. It calls nothing itself: the shell listens for clicks on the document and finds the UUID by walking up from what was clicked. That is why help works in nested views, in dialogs, and in controls the shell has never heard of.
The customizing tables the SDK ships bind help_uuid straight from their rows — a reference table's help travels with its data.
Nesting is the outline
Contexts nest, and the nesting is what the viewer shows as a breadcrumb. Wrap a page in one context and a table inside it in another, and F1 on a table cell opens the table's document with the page's document as its parent. The chain is built outermost-first from the help index, and a document whose title is not in the index shows its raw UUID — which is the quickest way to notice you forgot to compile.
F1
F1 is bound globally by the shell, in the capture phase, so it wins over the browser's own help.
- It looks at the focused element and finds the nearest enclosing help context, hopping out of shadow roots on the way.
- It collects every help context above it and turns each into a breadcrumb, reading titles from the help index.
- It opens the viewer on the innermost document.
- If nothing is bound, it opens the table of contents — no error, no message. F1 always answers.
The help indicator's click does the same thing for the one context it sits in.
A missing document
If a UUID reaches the shell but no document was compiled for it, the fetch 404s, the failure is logged at error level, and the viewer opens on Help is unavailable: the index is loaded, but this document could not be fetched. Run php artisan ui5:help --all and check that storage/ui5/help/<uuid>/<locale>.html exists — the shell reads compiled files, never your Markdown.
The usual way to get here is a literal uuid in a view whose document nothing declares, and then the command will not help. The compiler does not read views: it compiles a folder only when the module's #[Help] root or a catalog row names its UUID, and skips every other folder without a message (Concept). Bind the region to a document that is declared. The other cases are runtime-fed — a catalog row whose help_uuid was written by a seeder, or a storage/ that is older than the code.
The viewer
The viewer is a panel over the page. Esc closes it, as does the backdrop and its close button.
Its search is client-side: the shell fetches the compiled index once at start-up and builds a full-text index in the browser, weighted so tags and titles outrank body text. Two characters are the minimum. Results are links; clicking one opens that document in the same viewer.
The index is fetched while the shell starts up. Without it — a deployment that skipped ui5:help --all, whose output lives in storage/ — search finds nothing and F1 reports that help is unavailable; the rest of the shell is unaffected (LeanShell Overview). ui5:help --all is part of deployment, not an optional extra.
What the server contributes
The shell gets three endpoints and two options from the app's manifest — you do not configure them per app:
| the document, TOC and index endpoints | contributed by the SDK's help shell service |
helpManager.defaultLocale | which locale F1 opens; en by default |
helpViewer.closeHotkey | esc by default |
Both options live under ui5.shell.manifest in config/ui5.php and apply installation-wide.
An app can also open help itself, without a context or a keypress:
LaravelUi5.showHelp(uuid); // current default locale
LaravelUi5.showHelp(uuid, 'de');On Core without the shell this is a no-op, like every other shell call.
What it doesn't do
- It does not gate documents per actor. The help routes require a signed-in user and nothing else: any authenticated user can fetch any compiled help document by its UUID. Keep customer-specific or confidential material out of help documents.
- It does not negotiate the locale per user. F1 opens the configured default locale. A per-actor choice is not wired up yet.
- It has no server-side fallback. A document that is not compiled does not fall back to another locale or to the TOC; only no binding at all falls back to the TOC.
- The viewer's own labels are English. The result counts and the "type at least two characters" hint are not translated yet.
See also
- Help System — Concept:
#[Help], the UUID keys, what a document is - Build Pipeline:
ui5:helpand what it writes - Runtime: the endpoints and the storage layout in detail
- LeanShell Overview: where the help service sits among the shell services