If you're currently using OpenSearch Dashboards directly on a managed domain, you can migrate your saved objects — dashboards, visualizations, index patterns, and more — into an OpenSearch UI application. This gives you multi-source support, workspaces, and centralized access management.
Migrate from Dashboards
Why migrate?
| Feature | OpenSearch Dashboards (standalone) | OpenSearch UI Application |
|---|---|---|
| Data sources | Single domain only | Multiple domains + serverless + direct query |
| Access management | Domain-level IAM or fine-grained | Application-level IAM or SAML SSO |
| Workspaces | Not available | Team-based workspaces with scoped data |
| AI assistant | Limited | Amazon Q integration, natural language queries |
| Cross-account data | Manual setup | Built-in cross-account association |
| Centralized URL | One URL per domain | Single URL for all data sources |
What migrates
The export/import process transfers saved objects from your existing Dashboards instance into an OpenSearch UI workspace. Saved objects include:
- Index patterns
- Dashboards
- Visualizations (area, bar, line, pie, data table, metric, markdown, etc.)
- Saved searches (Discover saved queries)
- TSVB visualizations
- Vega visualizations
What does NOT migrate
- Alerting monitors and destinations
- Anomaly detection configurations
- ISM (Index State Management) policies
- Security configurations (roles, role mappings, tenants)
- Notebooks
- Application-level settings
Alerting, anomaly detection, and other plugin configurations live on the domain itself and are accessible through the OpenSearch UI once the domain is associated as a data source. You don't need to migrate them — they're already there.
Step-by-step migration guide
Step 1: Export saved objects from your existing Dashboards
- Open your existing OpenSearch Dashboards URL (the one on your domain)
- Navigate to Stack Management → Saved Objects
- Click Export all to download all saved objects as an NDJSON file
- Alternatively, select specific objects and click Export
Using the API:
# Export all saved objects
curl -X POST "https://your-domain-endpoint/_dashboards/api/saved_objects/_export" \
-H "osd-xsrf: true" \
-H "Content-Type: application/json" \
-d '{
"type": ["index-pattern", "dashboard", "visualization", "search"],
"includeReferencesDeep": true
}' \
--output saved-objects.ndjsonAlways use includeReferencesDeep: true to ensure that visualizations referenced by dashboards are included in the export.
Step 2: Create your OpenSearch UI application
If you haven't already, create an OpenSearch UI application and associate the same domain as a data source. See Create First App for the walkthrough.
Step 3: Create a workspace
- Launch your OpenSearch UI application
- Create a workspace that matches your use case (Observability, Analytics, etc.)
- Associate the domain as a data source for this workspace
Step 4: Import saved objects into the workspace
- Inside your workspace, navigate to Dashboards Management → Saved Objects
- Click Import
- Select the NDJSON file you exported in Step 1
- Choose how to handle conflicts:
- Automatically overwrite — replaces existing objects with the same ID
- Request action — prompts you for each conflict
- Click Import
Using the API:
curl -X POST "https://your-app-url/_dashboards/api/saved_objects/_import?overwrite=true" \
-H "osd-xsrf: true" \
-F "file=@saved-objects.ndjson"Step 5: Verify the import
- Navigate to Dashboards in the workspace
- Open each dashboard and confirm visualizations render correctly
- Check Discover to verify saved searches work
- Verify index patterns point to the correct indices
Handling index pattern conflicts
If your exported index patterns reference indices that exist on the domain, they should work automatically since the domain is associated as a data source. However, if index names differ:
- During import, you'll see a conflict resolution dialog
- Map the old index pattern to the correct index on the associated data source
- Select the appropriate data source from the dropdown
Migrating across multiple domains
If you have saved objects spread across several Dashboards instances (one per domain), you can consolidate them:
- Export saved objects from each domain separately
- Associate all domains with a single OpenSearch UI application
- Create workspaces as needed (one per team or use case)
- Import each export file into the appropriate workspace
- Update index patterns to point to the correct data source
Limitations
- Saved object IDs must be unique within a workspace. If two exports contain objects with the same ID, the second import will overwrite the first (or prompt for conflict resolution).
- Visualization types must be supported. Most standard visualization types are supported. Custom plugins or third-party visualization types may not import correctly.
- Tenant-based objects. If you used OpenSearch Dashboards multi-tenancy (Global, Private, custom tenants), each tenant's objects need to be exported separately. Workspaces in OpenSearch UI replace the tenant model.
- Version compatibility. The source Dashboards version should be compatible with the OpenSearch UI version. Objects from significantly older versions may require manual adjustment.
Post-migration checklist
- All dashboards render correctly in the new workspace
- Index patterns resolve to the correct indices
- Saved searches return expected results
- Time-based index patterns use the correct time field
- Visualizations that use scripted fields still work
- Team members can access the workspace with appropriate permissions
Troubleshooting
Import fails with "conflict" errors
- Use the
overwrite=trueparameter to replace existing objects - Or choose Request action during import to handle each conflict individually
Visualizations show "No data" after import
- The index pattern may not be connected to the correct data source
- Open the index pattern in Dashboards Management → Index Patterns and verify the data source assignment
- Check that the time range in the date picker covers your data
"Index pattern not found" errors on dashboards
- The index pattern was not included in the export — re-export with
includeReferencesDeep: true - The index doesn't exist on the associated data source — verify index names
TSVB or Vega visualizations don't render
- These visualization types may reference specific index names or Elasticsearch query syntax
- Open the visualization editor and update any hardcoded index names or queries
- Vega specs that use direct Elasticsearch API calls may need path adjustments