Customize your launcher
What every customer can change, where to change it, and what each field does on the device. Section anchors below match the "Read the docs →" links in each Builder section.
Where the editor lives
Portal → Your fleets → click your tenant. Four outer tabs at the top:
- Launcher — the Builder. Everything on this page.
- Broadcasts — push messages to devices (Pro+, details)
- Devices — registered devices, QR sticker, install paths
- Upgrade — buy Pro/Enterprise, or manage subscription (billing)
Inside the Launcher tab is a left sidebar of sections — each maps to one heading below.
Profile basics
Identity for this deployment. Three fields:
- Deployment name — string shown in the launcher header.
Customers see this every time they look at a device. Keep it short
—
"Acme Tools — Field"beats"Acme Tools Corporation Field Operations Tablet Fleet v3 (2026)". Max 120 characters. - Tenant ID — binds the config to a license. Set during signup; a mismatch with the license blob ⇒ runtime falls back to Core. You shouldn't normally edit this.
- MDM — which kiosk-capable MDM owns this deployment. Drives
the Device Info dialog's expected fields and (later) which
agent-action bridge the renderer asks the host for.
noneis the right answer for browser-kiosk + sideloaded APK deployments.
Each tenant has at least one profile. Pro tier unlocks multiple profiles (see Schedules below).
Features
Toggle which capabilities the launcher honors. Three groupings:
- Core (Free) — always on — tile grid, basic theme, built-in tools, QR provisioning, single profile, friendly error screens. No toggle — these ship with every tenant.
- Pro — theming, multi-profile, scheduled profiles, broadcasts, custom tools, package blocklist, biometric admin gesture, signage mode, agent action tiles, diagnostic overlay.
- Enterprise — remote config, telemetry export, SSO display, audit log.
The Builder accepts every flag at every tier so you can preview a Pro/Enterprise launcher on a Free license. On-device the runtime intersects with what your license actually entitles — a Pro flag on a Free device silently no-ops. See tiers for the full matrix.
Theme
Light/dark mode + brand colors. Available at every tier.
Brand colors (Free + Pro + Enterprise)
- Default mode —
Auto(follow OS),Always dark,Always light. Devices can override per-kiosk via the launcher's header menu on Pro. - Primary — your brand color. Paints launch buttons, focused tiles, the header brand mark. Carries across light AND dark mode via the renderer's "brand carry" cascade — set it once.
- Accent — secondary highlight. Tile focus rings, links, the default header mark color.
- Reset to MobiLauncher defaults — wipes the entire theme back to the brand defaults (basic + advanced light + advanced dark + wallpaper + logo). Use this if the launcher is looking off and you want a clean slate.
Light palette / Dark palette (Pro)
Per-surface palette editors under sub-tabs:
- Surfaces — background, surface
- Chrome — header bg, header ink, hero bg, footer bg
- Tiles & cards — tile bg, tile border, card bg
- Text — text, text-muted
- Accents — primary, accent, CTA, icon accent, divider
The Dark palette is independent — a Pro tenant can set
paletteDark.primary to a lighter blue (e.g. #5BAEEF) for better
contrast on dark surfaces, and the renderer applies that only in
dark mode.
Wallpaper (Pro)
Drag-and-drop upload for the hero band background image. Capped at ~3 MB after base64 encoding. The Portal downscales > 1920×1080 before storing.
Logo & font (Pro)
- Logo — replaces the default 3×3 grid mark in the launcher header. Capped at ~500 KB encoded; 256×256 source recommended.
- Custom font — asset ref the device resolves at runtime (your MDM ships the .ttf alongside the launcher bundle).
Status bar
Top app bar. Visibility + per-icon toggles.
- Visible — master switch. Off ⇒ no header at all.
- Show clock — always-on time display on the right side.
- Show battery / Show signal — placeholders today; light up when the host bridge exposes the relevant Android API.
- Show current user — SSO display, Enterprise only
(
ssoDisplayflag). Pulls the username from the device's MDM identity agent.
Hero
The slab between the launcher's header and tile grid. Five variants:
- Featured tiles — up to 4 large icon tiles. The default. Configure the slot tiles in the editor below the variant picker.
- Clock — large time display + optional date + optional caption line. Useful for wall-mounted lobby displays.
- Weather — clock + Open-Meteo current weather card. Lat/lng in the config OR uses browser geolocation. Free, no API key.
- Rich text — Tiptap-authored content (headings, lists, emphasis, links). The launcher renders ProseMirror JSON via an in-house safe walker — no Tiptap dependency on-device.
- None — no hero. The tile grid expands to fill the whole launcher band. Useful for rugged handhelds where every pixel counts.
Switching variants in the Builder seeds sensible defaults so it's a one-tap change, not a fill-out-a-form moment.
Tile grid
The main grid of tap-to-launch tiles. Six tile types:
- App — launches an Android app by package name (e.g.
com.android.chrome). On browser-kiosk hosts that can't dispatch intents, the tile shows a demo toast instead of failing silently. - Web — opens a URL. Defaults to opening in the launcher's
WebView;
openExternal: trueasks the host to dispatchIntent.ACTION_VIEWif it can. - Folder — opens a modal with child tiles. 1–16 children, no nested folders. Good for grouping admin tools.
- Spacer — blank cell. For deliberate layout gaps.
- Divider — a thin accent bar (2–16 px tall, configurable color) that spans every column of its row. Visual section break.
- Agent action —
reboot,clearAppData,runScript,syncNowvia the device's MDM agent. Pro tier; Free configs may include the tiles but the runtime no-ops them.
Grid size
Columns (3–8) × rows (3–12). The grid scrolls vertically when you have more tiles than fit, so don't be shy with rows. Good defaults:
| Device | Cols × Rows |
|---|---|
| 10" tablet | 4 × 3 |
| 7" tablet | 3 × 4 |
| 5–6" phone | 3 × 4 |
| Zebra TC handheld | 3 × 4 |
| Signage / TV | 5 × 3 |
You can change these later — devices pick up the new layout on next reload (or on the next remote-config poll if Enterprise).
CSV import
Bulk-load app/web tiles from a CSV via the "Import CSV" button.
Three columns: type,label,target. Skips malformed rows; surfaces
counts when done.
Live preview with device frames
The pane to the right of the Builder is a live iframe of the launcher rendering your current config. Every edit propagates within ~200ms. The device dropdown picks a real device shell (Zebra ET40, Galaxy XCover, Honeywell EDA, etc.) and renders the iframe at that device's exact CSS pixel resolution — so media queries fire the same way they will on-device. The screenshot button saves the current preview as a PNG; toggle "Frame" to include the device bezel + Android status bar in the image.
Tools
Custom entries in the launcher's Tools modal (the dropdown under
the header's grid icon). Built-in tools (Device Info, DNS/Ping,
Calculator, Speed Test) always render above your entries. Up to 12
custom tools; the action grid is 4 columns. Pro+ feature
(customTools flag).
Each tool is a tile in the same format as grid tiles — App, Web, Agent action, etc. Reuses the same icon-picker + label controls so authoring matches the main grid.
Admin access
Operator escape hatches and audit settings.
- Exit gesture + Exit PIN (Pro) — long-press a corner of the launcher to reveal an admin exit dialog. PIN is bcrypt-hashed client-side before it enters the config; raw PINs never persist. Without this, a kiosked device has no way out short of a reboot or MDM intervention.
- Diagnostic overlay (Pro) — long-press the OTHER corner to show engine state, license status, telemetry counters. Useful for field debugging without remote-console access.
- Audit log (Enterprise) — record every admin gesture, PIN
entry, and overlay open for compliance review. Requires the
auditLogflag entitled at runtime.
Schedules
Time-of-day profile rotation. Pro feature (scheduledProfiles).
Configure one or more schedules, each pointing at a profileId from
profiles[] with a day-of-week mask and a start/end time window. At
any moment the launcher walks the schedules in array order; first
match wins. If nothing matches, it falls back to
defaultProfileId.
A typical multi-shift kiosk:
Default → Day shift (Mon–Fri 08:00–17:00 implicit)
Schedule 1 → Night shift (Mon–Fri 17:00–06:00)
Schedule 2 → Weekend (Sat–Sun 00:00–24:00)
Resolution happens client-side on the device — no server round-trip at shift boundaries.
Saving
Edits autosave to your tenant slot ~800ms after you stop typing. The save strip at the bottom of the Builder flashes "Saved" when each save lands. Pro tier remote-config-polling devices pick up the new config on their next poll (default 5 minutes).
If you want to ship config to devices that can't reach our servers, use the Offline bundle download — see offline bundles.
If save fails:
- "Edit token rejected" — your browser's stored token is wrong. Sign up again with the same email to recover (we return your existing tenant + a fresh token).
- "Schema validation failed" — the editor shouldn't let this happen, but if it does, the server's validator is the source of truth. Email a screenshot and we'll fix the editor.