Launchpad
Overview of the optional Launchpad experience for Forms in Control.
Launchpad in Control gives you a more guided way to present Forms to end users. Instead of sending users directly to separate flow URLs, you can let them start from a shared Launchpad view with navigation, categories, and favorites.
This is useful when you want to gather several related flows in one place and make them easier to discover. At the same time, the existing direct access to individual flows can still be used exactly as before.
What Launchpad is
Section titled “What Launchpad is”Launchpad is an optional layer on top of Forms.
It gives users a start page where available flows can be shown in a structured menu. This can make the experience feel more like an application, especially when you have many flows for different tasks.
Typical examples:
- delegated administration for users and groups
- self-service tasks collected in one place
- request and approval flows grouped by area
What stays the same
Section titled “What stays the same”Launchpad does not replace ordinary flow URLs.
Each flow can still be accessed directly, for example when:
- a user opens a bookmarked flow
- another system links directly to a flow
- you want a simpler experience without Launchpad
In other words, Launchpad mode is optional. You can use Launchpad, direct flow access, or both.
Launchpad configuration
Section titled “Launchpad configuration”Launchpad mode is configured in the launchpad section of the Forms configuration.
| Name | Description | Default |
|---|---|---|
enabled |
Turns Launchpad on or off. If it is missing or false, Control behaves as a regular Forms setup without the Launchpad UI. |
false |
path |
Defines where Launchpad is available. | /launchpad |
webroot_dir |
Path to the built Launchpad UI assets. | N/A |
default_launch_mode |
Defines how flows are opened from Launchpad. Supported values: embedded, direct. |
embedded |
default_favorite_flow_ids |
List of flow IDs that should be shown as favorites when Launchpad loads. | N/A |
{ "name": "Forms", "config": { "http_context": "/control", "http_auth_redirect_url": "/control/authn/login", "webroot_dir": "/opt/frontend/forms", "flows": "@include_as_array:flows/*/flow.json", "launchpad": { "enabled": true, "path": "/launchpad", "webroot_dir": "/opt/frontend/control-launchpad", "default_launch_mode": "embedded", "default_favorite_flow_ids": [ "edituser", "editgroup" ] }, "http_listener": "default", "overlay_dir": "/opt/control/overlay/", "logout_endpoint_url": "${globals.logout_endpoint_url}" }}In this example:
- Forms is available under
/control - Launchpad is available under
/control/launchpad/ - the regular Forms UI and the Launchpad UI use separate web roots
- flows are still loaded from the normal Forms configuration
edituserandeditgroupare shown as default favorites
The webroot_dir values above are examples. Use the paths that match your own environment.
If the Control context path is /control and the Launchpad path is /launchpad, Launchpad is available at:
/control/launchpad/
How flows appear in Launchpad
Section titled “How flows appear in Launchpad”The Launchpad menu is built from the flows that are already configured in Control.
This means you do not create a separate list of Launchpad entries. Instead, Launchpad reads the configured flows and presents the ones the user is allowed to access and that are not explicitly hidden from Launchpad.
Hide a flow from Launchpad
Section titled “Hide a flow from Launchpad”Use hide_in_launchpad on a flow when it should remain available by direct URL or other navigation, but should not be listed in the Launchpad navigation.
Example:
{ "name": "internal-tool", "public": true, "hide_in_launchpad": true, "steps": "@include:steps/*.json"}The default is false, so flows are shown in Launchpad unless they opt out. This setting only controls whether the flow appears in the Launchpad navigation. It does not grant or remove access to the flow itself.
Categories in the menu
Section titled “Categories in the menu”Flows can be grouped in the Launchpad menu by using the category field on the flow.
Example:
{ "name": "createuser", "display_name": "Create user", "category": "Users/Create"}This creates a simple menu structure where the flow is shown under:
UsersCreate
In practice, the most common and useful setup is a main category with a subcategory.
If a flow does not have a category, it is shown directly at the Launchpad root level. The root level can contain both category entries and individual flow entries.
Launchpad sorts categories, subcategories, and flows case-insensitively so the menu remains predictable even when display names use different letter casing.
Favorites
Section titled “Favorites”Launchpad can highlight selected flows as favorites.
Default favorites are configured in the Launchpad settings by listing the flow IDs that should be shown as favorites when Launchpad loads.
Example:
{ "launchpad": { "default_favorite_flow_ids": [ "edituser", "editgroup" ] }}Access control
Section titled “Access control”Launchpad respects the same access rules as the flows themselves.
This means:
- users only see flows they are allowed to access
- protected flows do not show up as empty or broken menu options
- public flows can still be shown without requiring login
The filtering is done server-side before the navigation is sent to the Launchpad UI.
Authentication behavior
Section titled “Authentication behavior”If all flows shown in Launchpad are public, the user can open Launchpad without authenticating.
If one or more flows require authentication, Launchpad can redirect the user to log in before showing the protected content.
After login, the user is returned to Launchpad again.
Choosing between embedded and direct
Section titled “Choosing between embedded and direct”embedded is useful when you want Launchpad to feel like one connected experience, where users stay inside the same layout while working through a flow.
direct is useful when you want Launchpad to act more like a launch page, where each flow opens in its own normal view.
Both approaches use the same underlying flows.
When to use Launchpad
Section titled “When to use Launchpad”Launchpad is a good fit when you want to:
- collect many flows in one place
- make self-service and delegated administration easier to navigate
- present Control with a more application-like entry point
Direct flow access is still the better choice when a specific flow should be launched in a simple and focused way.