This page defines the user-extensible vocabulary for flexible content tagging and organization. User keywords are configuration-driven and defined in config/app-default-config.json under ngdpbase.userKeywords.
Vocabulary model note (2026-07): user keywords are the human tagging bucket — what a page is about, chosen by people. Two kinds of terms no longer belong here:
- Lifecycle state (
draft/review/published) now lives in the single-valuedstatus:frontmatter field, set via the Status select in the editor. Absentstatusmeans published. Legacy pages still carrying these as keywords are migrated automatically on save.capture(pages created by the capture bookmarklet) is machine provenance and now lives in System Keywords.
User Keywords is part of Page Metadata Documentation
"ngdpbase.maximum.user-keywords":
| Label | Description | Category | Enabled | Restrict Editing | Allowed Roles |
|---|---|---|---|---|---|
default |
Default keyword with no special restrictions | general | Yes | No | - |
"ngdpbase.maximum.user-keywords":
Showing Current User Keywords
| Label | Description | Category | Enabled | Restrict Editing | Allowed Roles |
|---|---|---|---|---|---|
default |
Default keyword with no special restrictions | general | Yes | No | - |
Each user keyword has the following properties:
| Property | Type | Description |
|---|---|---|
label | string | The keyword value used in metadata user-keywords array |
description | string | Human-readable description of the keyword's purpose |
category | string | Grouping category (e.g., "general", "access", "status", "subject") |
enabled | boolean | Whether the keyword is active and available for use |
restrictEditing | boolean | If true, restricts who can edit pages with this keyword |
allowedRoles | array | Roles allowed to edit (only used if restrictEditing is true) |
schemaOrg | string | Optional schema.org type mapping for semantic web |
User keywords are used in the user-keywords frontmatter field as an array:
---
title: Example Medical Research Page
system-category: documentation
status: review
user-keywords:
- medicine
- research
slug: medical-research-example
---
ngdpbase.maximum.user-keywords)| Aspect | System Categories | User Keywords |
|---|---|---|
| **Field** | system-category | user-keywords |
| **Format** | Single value (string) | Multiple values (array) |
| **Purpose** | Storage location control | Content tagging & classification |
| **Effect** | Determines /pages/ or /required-pages/ | No storage effect for most keywords — exception: private moves the page to a private location |
| **Configuration** | ngdpbase.systemCategories | ngdpbase.userKeywords |
| **Maximum** | 1 required | Up to 5 optional |
| **Extensibility** | Admin-controlled | User-extensible (Editor+ can propose) |
---
title: Introduction to Oceanography
system-category: documentation # ← Single category (WHERE to store)
user-keywords: # ← Multiple keywords (WHAT it's about)
- oceanography
- geology
slug: intro-oceanography
---
The backend reads ngdpbase.userKeywords configuration to:
The ValidationManager can validate user keywords:
Users with Editor role or higher can propose new keywords:
**Keyword**: astronomy
**Category**: subject
**Description**: Astronomy and space science content
**Reason**: We have 15 pages about astronomy with no appropriate keyword
**Schema.org Mapping**: (optional) AstronomicalObject
>
Note: Statistics tracking not yet implemented - Future Enhancement
If migrating from a different keyword system: