Filter by title

Page Groups

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.

What a Page Group Stores

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.

How Pages Use Groups

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.

Nesting Rules

Groups can nest by pointing parent to another page group name.

Important constraints:

  • Group nesting cannot be circular.
  • Maximum depth is 3 levels.
  • Root groups are groups whose parent is empty.

This keeps runtime navigation predictable and avoids unbounded nesting in the generated menu.

Visibility and Permissions

Page groups do not replace page permissions. Runtime visibility still depends on the pages inside the group.

In practice:

  • Pages are added to the runtime menu only if the current user can access them.
  • Groups are containers for those visible pages.
  • Groups without visible page descendants are omitted from the runtime root menu.

This means page permissions remain the real security boundary, while page groups control menu organization.

Split Descriptor Example

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.

Icon Guidance

Use CSS class strings for icons, for example:

  • fa-solid fa-folder
  • fa-solid fa-folder-tree
  • fa-solid fa-boxes-stacked

Do not treat icon as an image URL or file path.

See Also

Contributors


Last updated: July 06, 2026 Edit this page on GitHub

Was this page helpful?

Please make a selection.

To help us improve, please share your reason for the negative feedback in the field below.

Please enter a note.

Thank you for your valuable feedback!

Please note that although we cannot respond to feedback, our team will use your comments to improve the experience.

ABP Community Talks
Low-Code, High Precision
13 Aug, 17:00
Online
Watch the Event
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.