You are viewing beta documentation for Navigation 4.x.
Migrations
Migrating from Olivemenus
If your Craft site runs Olivemenus (opens new window) (olivestudio/craft-olivemenus), Navigation can copy menus and node structure without modifying Olivemenus data.
Prerequisites
- Install both Olivemenus and Navigation on the same Craft site.
- Back up your database and project config.
- Run the migration on staging first.
Control panel
- Go to Navigation → Settings.
- Under Migrations, choose Olivemenus.
- Select the menus to migrate (or choose All).
- Optionally enable Skip existing handles if you do not want to overwrite menus that already exist in Navigation.
- Click Migrate Menus and review the per-menu output log. Click Done when finished.
Console
# All Olivemenus menus
php craft navigation/migrate/olivemenus
# Specific handle(s)
php craft navigation/migrate/olivemenus --handle=mainMenu,footerMenu
# Skip menus whose handles already exist in Navigation
php craft navigation/migrate/olivemenus --skip-existingWhat is migrated
| Olivemenus | Navigation |
|---|---|
| Menus and handles | Menu name, handle, site settings |
| Entry-linked items | Entry node type |
| Custom URL items | Custom node type |
| Nested structure | Parent/child tree preserved |
| CSS classes, new window | classes, newWindow, customAttributes |
| Custom attributes JSON | Parsed into customAttributes |
If an entry-backed item no longer has a resolvable linked element, it is converted to a Custom URL node and a warning is logged.
Manual follow-up
| Olivemenus feature | Notes |
|---|---|
class_parent | Not migrated — rebuild with node classes or custom fields |
| Single-site menus | Olivemenus site binding is mapped to the menu's configured site |
| Template output | Replace Olivemenus Twig helpers with Navigation render() or custom templates |
Handle collisions
When a Navigation menu with the same handle already exists, the migrator creates a new menu with a numeric suffix (for example mainMenu1).
Related
Last updated: July 3, 2026, 1:22:08 PM