docs/en/low-code/page-groups.md
//[doc-seo]
{
"Description": "Define ABP Low-Code page groups to organize runtime pages into dynamic menu folders with ordering, icons, and nesting."
}
Page groups are dynamic menu folders used by low-code pages. They let you organize runtime pages into nested navigation structures without hardcoding menu items in the frontend.
A page group descriptor stores:
| Field | Description |
|---|---|
name | Stable identifier used by pages in their group field |
title | Display label shown in the runtime menu |
icon | CSS class string for the menu icon |
order | Sort order among sibling groups |
parent | Optional parent group name for nesting |
If a group does not define an icon, the runtime menu uses a folder-style default icon.
Pages reference a group by name:
{
"name": "products",
"title": "Products",
"type": "dataGrid",
"entityName": "Acme.Catalog.Product",
"group": "inventory"
}
If group is omitted, the page becomes a top-level runtime menu item.
A group is only a container. It does not define page data, routes, or entity behavior by itself.
Groups can nest by pointing parent to another page group name.
Important constraints:
3 levels.parent is empty.This keeps runtime navigation predictable and avoids unbounded nesting in the generated menu.
Page groups do not replace page permissions. Runtime visibility still depends on the pages inside the group.
In practice:
This means page permissions remain the real security boundary, while page groups control menu organization.
In split descriptor projects, a page group file in pageGroups/ stores one descriptor object, not a wrapper document:
{
"name": "inventory-insights",
"title": "Insights",
"icon": "fa-solid fa-folder-tree",
"order": 20,
"parent": "inventory"
}
For example, pageGroups/inventory-insights.json would use that shape directly.
If you are looking at the logical aggregate model instead of split files, the same data appears under the top-level pageGroups array:
{
"pageGroups": [
{
"name": "inventory",
"title": "Inventory",
"icon": "fa-solid fa-boxes-stacked",
"order": 10
},
{
"name": "inventory-insights",
"title": "Insights",
"icon": "fa-solid fa-folder-tree",
"order": 20,
"parent": "inventory"
}
]
}
In split descriptor projects, page groups belong to the pageGroups/ descriptor category.
Use CSS class strings for icons, for example:
fa-solid fa-folderfa-solid fa-folder-treefa-solid fa-boxes-stackedDo not treat icon as an image URL or file path.