UI Profiles & Data Source Filtering
Meratyn can hide data sources, web services, and plugins to simplify the
interface for beginners or to standardize a deployment across a team. Hiding is
non-destructive — nothing is removed, and any item can be re-enabled at any
time. Profile preferences are stored locally in the browser/app and never travel
inside a saved .meratyn.json project.
Public examples are the exception to the presentation rule, not to preference
ownership: a project with metadata.publicShowcase: true may carry a
showcase.workspace allowlist. The app applies it as disposable session state
and intersects it with the local profile. It never writes the allowlist into
local settings. Showcase scope also filters command-palette and shortcut
discovery so hidden authoring tools do not remain reachable through a second
menu path. See Project Format.
For users
Onboarding
By default Meratyn starts on the Advanced interface — everything visible — and does not show a first-launch welcome dialog. Choose a simpler experience level at any time from Settings → Interface (see below):
- Beginner — only the essential data sources and tools.
- Intermediate — common data sources, services, and plugins.
- Advanced — everything Meratyn offers (the default).
An administrator profile can pre-configure the interface for a whole deployment and lock these controls.
Settings → Interface
The interface is controlled by a single four-state selector:
- Beginner / Intermediate / Advanced are developer-curated presets. Selecting one applies its layout immediately. Advanced reveals everything, so it is the full, unrestricted interface.
- Custom activates automatically the moment you hand-edit any item below; it is a status, not a button you click.
Open Settings → Interface to:
- Pick an experience level, which fills the checklists from each item’s complexity and takes effect at once.
- Check or uncheck individual data sources, plugins, whole menus (Project, Edit, View, Add Data, Processing, Controls, Plugins, Help), and the items within the Project, Edit, View, Processing, Controls, Settings, and Help menus. Editing any item switches the selector to Custom.
The Settings menu itself, and its Language / Layout / Interface entries, are always shown so the profile UI can never be hidden away.
Consumers and authors
Profiles support both people who author maps and people who primarily consume them. A consumer can inspect the map, search, measure, use enabled controls, and open the same project without being pushed through a creation-first onboarding flow. Authors retain the normal Add Data, Layers, Style, processing, and plugin workflows whenever their profile makes those surfaces visible.
For administrators
A deployment can be pre-configured (and optionally locked) with an
admin-profile.json file. When present, it is applied on startup, the onboarding
wizard is skipped, and — if lock is set — the Interface settings are read-only.
File location
- Web / embed: serve
admin-profile.jsonfrom the application root (for the Docker/nginx build, the served document root). A missing file is ignored. - Desktop: place
admin-profile.jsonin the app config directory (read_admin_profilereads<app_config_dir>/admin-profile.json). The desktop file takes precedence over a bundled web file.
File format
{
"enabled": true,
"level": "intermediate",
"lock": true,
"hiddenDataSources": ["postgres", "video"],
"hiddenPlugins": ["maplibre-gl-geoagent"]
}
| Field | Type | Meaning |
|---|---|---|
enabled | boolean | Whether filtering is active. Defaults to true for an admin file. |
level | "beginner" | "intermediate" | "advanced" | Seeds the hidden lists from each item’s tier. Optional. |
lock | boolean | When true, users cannot change the profile from Settings. Removing the file (or serving one without lock) releases the lock on the next launch. |
hiddenDataSources | string[] | Explicit data-source ids to hide. Overrides the preset when present. |
hiddenPlugins | string[] | Explicit plugin ids to hide. Overrides the preset when present. |
hiddenMenus | string[] | Top-level menu ids to hide (project, edit, view, addData, processing, controls, plugins, help). |
hiddenMenuItems | string[] | Menu-item ids to hide (e.g. processing.raster, help.diagnostics, controls.minimap). |
Data-source ids are the catalog ids in
apps/mappview/src/features/settings/preferences/profile/data-sources.ts
(DATA_SOURCE_CATALOG; e.g. vector, xyz, mbtiles,
postgres). Plugin ids are the stable ids defined in
packages/plugins/src/plugins/* (e.g. maplibre-gl-geoagent). Menu and
menu-item ids are the catalog ids in
apps/mappview/src/features/settings/preferences/profile/menus.ts
(TOP_LEVEL_MENUS, MENU_ITEM_CATALOG, MENU_ITEM_GROUPS).
hiddenMenus hides only its toolbar-menu container. It does not revoke a
command that is intentionally available through another surface. Use
hiddenMenuItems and hiddenPlugins for action-level discovery gates: for
example, controls.measure hides Measure from Controls, its direct toolbar
action, and the command palette; maplibre-gl-geo-editor hides GeoEditor/Draw
from plugin, layer, toolbar, and command-palette launchers. These settings do
not alter project data or the .meratyn.json schema.
When a level preset is active, external/bundled drop-in plugins (which load
asynchronously after startup) are folded into the hidden set as they appear, so
a beginner profile keeps hiding advanced plugins even when they load late.