WordPress admin
Nucleo adds the Nucleo AI menu to the dashboard: here you find each screen, who can open it and what it does.
On this page
01Overview
Nucleo adds a top-level menu, "Nucleo AI", with 14 items to the dashboard.
Each item requires a WordPress capability. Pro items stay in the menu in Free, locked.
Almost all pages are React apps. The AI agents page is a PHP page.
The pages have no API of their own. They run the nucleo/* abilities through the WordPress Abilities REST API.
The document editor is a hidden page (nucleo-editor). It replaces Gutenberg only for posts with a Nucleo document.
The content model registers types, taxonomies and fields. The fields also appear in the native WordPress screens.
The Pro functions are in the Pro package. They manage the license, the updates and the Pro edition.
The Free package for WordPress.org follows the directory guidelines. Compared with the Free package downloaded from nucleowp.dev, it does not contain:
- the Kits, Performance and License items, the Critical CSS service tab and the CSS reduction options: no menu item is locked;
- the
nc/htmlandnc/shortcodeblocks and theperf.html.blockquality rule; - the
nucleo/component-activateandnucleo/critical-requestabilities; - the language pack installation in the site import: the language is changed in Settings > General;
- the translation files: translate.wordpress.org provides them.
03Admin pages
Overview (nucleo)
What it does: summarizes the site with documents, quality, recent activity, layouts and status.
How to use it: "Nucleo AI" → "Overview". The page loads nucleo/site-describe, nucleo/quality-scan (page: 1), nucleo/audit-list (limit: 5) and nucleo/layout-list. Only administrators also load nucleo/status and nucleo/settings-get.
- "New page" opens the New document dialog with type
page. - "Open the header editor" opens the first layout with area
header. Without a layout, the button is disabled. - "Rebuild the cache" (administrators only) calls
nucleo/cache-rebuild. - With zero documents, the first-run panel appears, with three tabs: Kit, AI agents and blank page. "Don't show again" calls
nucleo/settings-setwithonboarding.dismissed: true.
Permissions: edit_posts. The status sections require manage_options.
Edition: Free.
Known limits: users who are not administrators read "Versions, storage and conflicts are visible to administrators only.".
Pages (nucleo-documents)
What it does: lists pages and posts with status, language and SEO score.
How to use it: tabs page ("Pages") and post ("Posts"), chosen with ?tab=, default page. The page calls nucleo/doc-list and nucleo/quality-scan.
- Row menu: Edit, View, Text only (
&view=texts) and Translate, with at least two languages. - "New document" opens the New document dialog with the type of the tab.
Parameters: search by title, on the server. Filters by status and language, in the browser.
Permissions: edit_posts.
Edition: Free.
Known limits:
- 20 rows per page.
- The status and language filters apply only to the loaded page.
- The check boxes have no bulk actions.
- The "Text only" link adds
&view=texts, and the editor opens the "Text only" view.
Layouts (nucleo-layouts)
What it does: manages the layouts by area and their display conditions.
How to use it: tabs by area header, footer, single, archive and popup, default header.
- "New layout" calls
nucleo/doc-createwith typenucleo_layoutand opens the editor. - "Conditions" opens a panel with "Show on", "Hide on" and "Priority". Saving calls
nucleo/layout-conditions-set. - "Which layout applies?" calls
nucleo/layout-explain. - The conflicts from
nucleo/layout-listappear in a notice with "Change priority". - The value search uses WordPress users, terms and content, with 8 results.
Parameters: 14 condition types.
Permissions: edit_theme_options.
Edition: Free. The language condition requires Polylang or WPML. Without them, the page shows "Language requires Polylang or WPML.".
Known limits: the popup activation and frequency fields are disabled ("Coming soon"). The conflict error shows "This layout was changed elsewhere" with Reload.
Global sections (nucleo-sections)
What it does: lists the reusable sections (nucleo_section) with the number of pages that use them.
How to use it: the page calls nucleo/doc-list with postType: nucleo_section and nucleo/section-list. "New section" opens the New document dialog.
Parameters: search in the browser.
Permissions: edit_theme_options.
Edition: Free.
Known limits: the row menu has only Edit.
Design system (nucleo-design)
What it does: edits the design tokens.
How to use it: tabs colors, typography, spacing, shapes and containers, default colors.
- The page loads
nucleo/tokens-get. "Save" callsnucleo/tokens-setwith only the changed tokens. - Importing a font calls
nucleo/fonts-import. - "Revert changes" restores the saved values.
Parameters: see the Design tokens section.
Permissions: edit_theme_options.
Edition: Free.
Known limits:
- Only colors and typography are editable. Spacing, shapes and containers are read only.
- The contrast check uses the 4.5 threshold.
- An invalid hexadecimal color disables "Save".
- The page warns (
beforeunload) if you leave with unsaved changes.
Kits (nucleo-kits)
What it does: shows the starter kits and applies them.
How to use it: the page calls nucleo/kit-list. The thumbnail comes from GET /nucleo/v1/kit-preview?kit=<id>.
- "Preview changes" calls
nucleo/kit-applywithdryRun: true. - "Apply" asks for confirmation and calls
nucleo/kit-apply.
Parameters: see the Kits section.
Permissions: edit_theme_options.
Edition: Pro. In Free the page shows the Pro block and does not call nucleo/kit-list.
Known limits: the ecommerce kit requires WooCommerce. Without it, "Apply" is disabled. With install_plugins, the page offers "Install %s".
Content model (nucleo-content)
What it does: edits content types, taxonomies and field groups.
How to use it: tabs postTypes, taxonomies, fieldGroups and json, default postTypes.
- The page loads
nucleo/model-get. - Additions, changes and removals change only the draft. The JSON tab applies the text to the draft.
- "Save" calls
nucleo/model-validate. Without errors, it shows additions, removals and changes. Every destructive change must be checked. - "Confirm" calls
nucleo/model-setwithconfirmequal to the checked ids.
Parameters: see the Model format section.
Permissions: the item and the abilities nucleo/model-get, nucleo/model-validate and nucleo/model-set require manage_options.
Edition: Free. In Free, the field types relation and repeater and the taxonomy location are disabled.
Known limits: the page warns (beforeunload) if you leave with unsaved changes.
Quality and SEO (nucleo-quality)
What it does: scans the site and shows the problems for each page.
How to use it: tabs issues, pages, overrides and rules, default issues.
- The scan calls
nucleo/quality-scanpage by page, untilnextisnull. - If no scan has ever run, the page offers "Start the first scan".
- A click on a title opens the details with
nucleo/quality-check.
Permissions: edit_posts. Without edit_others_posts, the page is read only and the issues and overrides tabs disappear. The rules tab requires edit_theme_options.
Edition: Free.
Known limits: the overrides tab shows "Not available yet". The rules tab is a static table of 19 rules. The full rules are in the Quality engine section.
Performance (nucleo-performance)
What it does: asset audit, loading rules, CSS reduction and critical CSS.
How to use it: tabs summary, assets, rules, audit and optimize, default summary. The old values css and critical open optimize.
- The page loads
nucleo/assets-report. While an audit runs, it repeats the request every 5 seconds. - The actions use
nucleo/assets-audit,nucleo/assets-rules-set,nucleo/css-status,nucleo/css-optimize,nucleo/css-optimize-apply,nucleo/css-optimize-off,nucleo/critical-set,nucleo/critical-requestandnucleo/settings-set(performance.purgeSafelist).
Parameters: see the Optimizer and assets section.
Permissions: edit_theme_options.
Edition: Pro. In Free the whole page shows the Pro block.
Known limits: the CSS measurement in the browser uses at most 5 sample URLs, desktop and mobile. The manual critical CSS has a limit of 51200 bytes.
AI agents (nucleo-agents)
What it does: connects MCP agents to the site. It shows the MCP server URL, the registered OAuth clients, the active tokens, the dynamic registration switch, the allowed domains and the .htaccess rule for the Authorization header.
How to use it: the page shows the URL rest_url('nucleo/v1/mcp') and the quick setups for Claude Desktop and Claude Code.
{"mcpServers":{"nucleo":{"url":"<server URL>"}}}# adds the Nucleo MCP server to Claude Code
claude mcp add --transport http nucleo <server URL>The page also shows the STDIO alternative, from the terminal:
# MCP server over STDIO with the given user's permissions
wp nucleo mcp --user=<login>- The client table shows name, type (
prePre-registered,cimdMetadata document,dcrDynamic registration; with the "Confidential" label if it has a secret), who authorized it, date, last use, active access tokens and scope. - "Add agent" creates a pre-registered client (
kind = pre). Theclient_idappears only once. - "Add confidential agent" creates a client with a client secret. The secret appears only once, on the next page, together with the
client_id; the database keeps only the hash. - "Save domains" saves the list of allowed domains (
nucleo_oauth_domains). Empty list: no limit. Clients added by hand are not subject to the list. - "Write the .htaccess rule" appears if agent requests reach the site without the
Authorizationheader. It writes aNucleoblock into the.htaccessof the root that passes the header to PHP. - "Revoke tokens" sets
revoked = 2on the client's tokens that are still active. The client stays. - "Delete" removes the client and all its tokens, after confirmation.
- The switch saves the
nucleo_oauth_dcroption.
Parameters: "Add agent" and "Add confidential agent".
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
name | string | 1 to 200 characters | — | Required |
redirect_uri | URL | https, or http only on localhost or 127.0.0.1 | — | Rules of the OAuth client registration |
redirect_uris | URL, one per line | as redirect_uri | — | Only for the confidential client |
"Delete" removes the client and all its tokens. The operation asks for confirmation.
Permissions: manage_options for the page and for each action. Each form has a nonce.
Edition: Free.
Known limits: errors when adding: missing_name, name_too_long, invalid_redirect and save_failed. The confidential client's secret stays in a transient for 60 seconds. If the OAuth tables are missing, the page installs them.
AI activity (nucleo-activity)
What it does: shows the log of ability operations and lets you undo them.
How to use it: the page loads nucleo/audit-list with limit: 200.
- Filters in the browser: agent, user, action, document text and "Only errors".
- "Restore" appears on the successful entries of
doc-patch,doc-texts-set,doc-publish,doc-rollbackanddoc-translate. It callsnucleo/doc-revisions, takes the second-to-last revision and, after confirmation, callsnucleo/doc-rollback.
Permissions: edit_posts. Without edit_others_posts, the page is read only, shows only your own entries and "Restore" disappears.
Edition: Free.
Known limits: 25 entries per page, from the last 200. "Restore" always returns to the second-to-last revision of the document, not to the one before the selected entry.
Tools (nucleo-tools)
What it does: exports and imports the site, rebuilds the cache and shows the system status.
How to use it:
- "Download zip" calls
nucleo/site-exportand downloads the filenucleo-export-YYYY-MM-DD.zip. - The import accepts a
.zipor several.jsonfiles. It first callsnucleo/site-importwithdryRun: trueand shows the preview. "Import" repeats the call withdryRun: false. - "Overwrite changes made on the site" sets
forceafter a confirmation with the list of files. - "Rebuild all" calls
nucleo/cache-rebuild. The status comes fromnucleo/status, with "Copy report".
Parameters: see the Import, export and sync section.
Permissions: manage_options.
Edition: Free.
Settings (nucleo-settings)
What it does: edits the Nucleo options. The keys are described in the Settings section.
How to use it: tabs editor, performance, service ("Critical CSS service"), captcha, integrations and agents, chosen with ?tab=, default editor.
- The page loads
nucleo/settings-get. "Save changes" callsnucleo/settings-setwith only the group of the active tab. integrationsshows the detected plugins, read only.agentslinks to the AI agents page.
Parameters: see the Settings section.
Permissions: manage_options.
Edition: Free. The service tab is Pro: in Free it shows the Pro block.
Known limits: the service key and the captcha secret never return to the browser. A field left empty is not sent and keeps the saved value.
License (nucleo-license)
What it does: shows the license state, the plans and the activation and deactivation forms.
How to use it: the page shows one of these states.
| State | Condition | Content |
|---|---|---|
free | Pro package absent | Plans, Free and Pro comparison, FAQ and the "Open your account" link |
inactive | Pro installed, no key | Plans and the "Already have a key?" form |
invalid | Key rejected | Server message |
active | Valid license | Masked key, expiry, updates and "Deactivate license" |
In the active state, the expiry shows a yellow notice from 0 to 30 days and a red one if it has passed, with "Renew". The activation form is described in the License activation section.
Parameters: filter nucleo/license_plans, with a list of plans {id, name, price, period, sites, description, recommended, url}.
Permissions: manage_options.
Edition: Free. Activation and deactivation exist only in the Pro package.
Known limits: the key reaches the browser masked: 12 dots plus the last 4 characters.
New document dialog
What it does: creates a blank document and opens the editor.
How to use it: buttons "New page", "New document" and "New section". "Create and open the editor" calls nucleo/doc-create with title, postType, a blank document and publish.
Parameters: title (required), type page or post (if the page does not set it), "Publish now" (only with publish_pages).
Permissions: those of nucleo/doc-create.
Edition: Free.
Known limits: the starting point "From kit template" is disabled ("Not available yet").
Translation dialog
What it does: translates the texts of a document into another language of the site.
How to use it: "Translate" item of the Pages page. The dialog loads nucleo/doc-texts and shows the original and the translation side by side. "Send translation" calls nucleo/doc-translate with only the filled texts and publish: false.
Parameters: target language, translated title and texts.
Permissions: those of nucleo/doc-translate.
Edition: Pro. The dialog appears with at least two languages (Polylang or WPML).
Known limits: without other languages, the dialog shows "No other language is set for this site.".
04Document editor
Editor page (nucleo-editor)
What it does: mounts the React editor of the Nucleo document of a post.
How to use it: admin.php?page=nucleo-editor&post=<ID>. The page does not appear in the menu. The title is "Nucleo editor".
Parameters: post (ID of the post, in the query string).
Permissions: the page requires edit_posts. Rendering requires edit_post on the post, otherwise it responds with 403.
Edition: Free.
Known limits: below 1024 px of width, the editor forces the "Text only" view.
Starting a document
What it does: creates the Nucleo document for a post that does not have one.
How to use it: if nucleo/doc-get responds not_found, the editor shows "This content has no Nucleo document yet". "Start with Nucleo" calls nucleo/doc-create with a blank document, with a section as the root.
Permissions: those of nucleo/doc-create.
Edition: Free.
Known limits: if the post already has content, the editor warns that paragraphs, headings and lists become text blocks. Images and other elements do not carry over. Nucleo keeps a copy of the original text. The "Open in the WordPress editor" button opens the classic WordPress editor.
Gutenberg and post.php
What it does: opens the Nucleo editor in place of Gutenberg only for posts with a Nucleo document.
How to use it:
- For Nucleo posts, the WordPress block editor does not open. The edit link leads to the Nucleo editor.
post.php?action=editon a Nucleo layout or section redirects to the Nucleo editor.post.phpon another Nucleo page stays open, with title, custom fields and publishing. The classic editor disappears and the notice "Open the Nucleo editor" appears.- A draft Nucleo page with blocking quality issues does not go online from
post.php, from the block editor or by scheduling. The REST API respondsquality_blocking;post.phpkeeps the previous status.
Permissions: those of WordPress for post.php.
Edition: Free.
Known limits: after saving a Nucleo page from post.php, the edit link stays on post.php.
Preview
What it does: builds the document in memory, without saving it, and shows it in an isolated frame.
How to use it: 300 ms after the last change, the editor calls POST /nucleo/v1/preview with the postId of the page. The preview uses the post context: bindings, links and language. The frame receives HTML, CSS, the site's stylesheets and the token CSS. A click on an element selects the nearest node.
Permissions: edit_posts. With postId, also edit_post on the post.
Edition: Free.
Known limits: responses that arrive after a newer one are discarded.
Structure, insert and inspector
What it does: edits the document tree and the properties of the nodes.
How to use it: full view with three columns.
- Structure: a tree with Up, Down, Duplicate and Delete for each node except the root. Dragging: top quarter for before, bottom quarter for after, middle for inside. The drop is allowed only if the node accepts the type.
- Insert: a catalog searchable by name, title and description, grouped by category. The new node goes inside the chosen node if it accepts it, otherwise after it. Without a selection it goes to the end of the root. The new ids are
nplus 7 base-36 characters. - Inspector: tabs "Content", "Settings" and "Style", generated from the node type. The style tab has a breakpoint bar
base,md,lgandxl, and shows the inherited value. Thesrcfield ofnc/imageopens the media library.
The catalog comes from nucleo/catalog-list and nucleo/catalog-get.
Permissions: edit_post on the post.
Edition: Free.
Known limits: the tree column is 200 to 520 px wide. The default is 260 px and is saved in the browser. Undo and Redo keep 100 steps in memory and reset after saving, restoring or reloading.
Text only view
What it does: shows all the texts of the document in a single form, in page order.
How to use it: "Complete" or "Text only" selector in the top bar. The view loads nucleo/doc-texts. "Save texts" calls nucleo/doc-texts-set with baseRevision.
Permissions: edit_post on the post.
Edition: Free.
Known limits: with unsaved structure changes, the save is rejected: "Save the structure changes first.". Going back to the "Text only" view does not discard unsaved texts. If editor.textOnlyRoles lists all the user's roles, the view is always the "Text only" view. The ?view=texts parameter opens the "Text only" view first (see the editor group).
Saving, publishing and conflicts
What it does: saves the changes as operations and publishes the document.
How to use it:
- The changes accumulate as
set,move,remove,duplicateandinsertoperations. - "Save" calls
nucleo/doc-patchwithbaseRevision,opsandacknowledge. - "Publish" saves the structure, then the texts changed in the "Text only" view, then calls
nucleo/doc-publish. - A quality problem with severity
errorblocks the save. To accept it, a reason is required, sent inacknowledgeas{rule, node, reason}. - With a
conflicterror, the editor shows "The document was changed elsewhere.", with Reload (discards the local changes) and Compare (opens the revisions).
Permissions: those of the abilities. nucleo/doc-publish uses the scope nucleo:publish.
Edition: Free.
Known limits: "Duplicate" saves at once, because the server reassigns the ids. With unsaved structure or text changes, the bar shows "Unsaved changes" and the browser asks for confirmation before leaving. Changes made during a save stay pending.
Revisions
What it does: lists the document revisions and restores a revision.
How to use it: "Revisions" button. It loads nucleo/doc-revisions and nucleo/audit-list (limit: 100), to show the agent that made each change. "Restore" asks for confirmation and calls nucleo/doc-rollback.
Permissions: those of the abilities.
Edition: Free.
Known limits: the latest revision has no "Restore".
Side panels
What it does: adds context tabs to the editor.
How to use it:
| Tab | Ability | Content |
|---|---|---|
| Layout | nucleo/layout-explain, nucleo/layout-list | Layouts applied to the post URL by area, with links to the editor |
| Design system | nucleo/tokens-get, nucleo/tokens-set | Editable colors, spacing and texts in read-only |
| Status | nucleo/status | Versions, store, documents and conflicts with other plugins |
| Asset | nucleo/assets-report, nucleo/assets-rules-set | Assets per template, suggestions with "Apply" |
| AI activity | nucleo/audit-list (limit: 50) | Latest operations, read only |
| Links | — | Binds the text fields of the node to a data field (node.bind), if the type supports it |
| Fields | nucleo/fields-get, nucleo/fields-set | Fields of the post model, saved separately with "Save fields" |
The Links tab reads the sources with nucleo/bind-fields. The Fields tab appears only if the type has field groups.
Permissions: those of the abilities.
Edition: Free. In Free, the Asset tab shows "The asset report is not available in the Free edition.".
Known limits: "Apply" in the Asset tab rewrites the whole list of rules with the added rule. The AI activity panel is a log: the editor does not generate content with AI.
Preview size and mockup
What it does: simulates devices in the preview.
How to use it: device buttons in the full view.
| Device | Size | Rotation |
|---|---|---|
mobile | 390×844 | yes |
tablet | 820×1180 | yes |
desktop | 1440×900 | no |
ultra | 2560×1080 | no |
On mobile and tablet, the "Mockup" switch draws an iOS or Android frame with a status bar and an address bar.
Permissions: none.
Edition: Free.
Known limits: the preview scale goes from 0.1 to 1.
Keyboard shortcuts
What it does: quick actions in the editor. Mod means Ctrl or ⌘.
How to use it:
| Keys | Action |
|---|---|
| Mod+Z | Undo |
| Mod+Shift+Z | Redo |
| Mod+S | Save |
| Mod+D | Duplicate the node (saves at once) |
| Del / Backspace | Delete the node, after confirmation |
| Esc | Deselect |
/ | Opens the Insert tab (full view) |
| Alt+↑ / Alt+↓ | Moves the node among its siblings |
Permissions: none.
Edition: Free.
Known limits: inside a text field only Mod+Z, Mod+Shift+Z and Mod+S work. Node actions do not apply to the root or without a selection.
05Settings
The settings are read with nucleo/settings-get and written with nucleo/settings-set. Both require manage_options and the scope nucleo:admin.
Saving is partial: groups and keys that are absent stay as they are. Each value is checked before writing. An error returns invalid_input and writes nothing.
editor group
What it does: saves the roles that use the "Text only" view as the default view.
How to use it: editor tab, field "Default view by role" for Editor, Author and Contributor.
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
textOnlyRoles | list of strings | slugs of existing WordPress roles | [] | Option nucleo_settings['editor']['textOnlyRoles'], without duplicates |
Permissions: manage_options.
Edition: Free.
Known limits: an unknown role returns "Unknown role: <role>.". The value is saved and the editor uses it: if all the user's roles are in the list, the initial view is always the "Text only" view.
performance group
What it does: sets the WooCommerce cart fragments and the selectors to keep when reducing the CSS.
How to use it: performance tab. The safelist can also be edited from the Performance page.
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
wooFragments | string | keep, off | off | keep saves the option nucleo_woo_fragments = keep. off deletes it. With off, Nucleo turns off the cart fragments on pages without a cart |
purgeSafelist | list of strings | CSS selectors | [] | Option nucleo_purge_safelist. Spaces removed, empty lines and duplicates deleted |
Permissions: manage_options.
Edition: Free. The values are used only in the Pro package.
Known limits: reading also accepts a safelist saved as a string separated by spaces or commas.
service group
What it does: configures the external critical CSS service.
How to use it: service tab ("Critical CSS service").
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
url | string | https URL or empty | '' | Option nucleo_service['url'] |
key | string | any | '' | Option nucleo_service['key']. Write only: reading returns keySet (boolean) |
Permissions: manage_options.
Edition: Pro in the interface: the tab is locked in Free. The nucleo/settings-set ability does not check the edition, so an agent with manage_options can write the group in Free too.
Known limits: without an https URL and a key, the service responds service_not_configured.
captcha group
What it does: chooses the captcha of the native forms (nc/native-form), one for the whole site.
How to use it: captcha tab. Each native form shows the captcha, unless settings.captcha: false is set on the form.
Parameters: option nucleo_captcha.
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
provider | string | '', recaptcha, recaptcha-v3, hcaptcha, turnstile, friendly | '' | '' turns the captcha off |
siteKey | string | public key | '' | — |
secret | string | secret key (Friendly Captcha: API key) | '' | Write only: reading returns secretSet |
threshold | number | 0 to 1 | 0.5 | Only recaptcha-v3: minimum score |
Permissions: manage_options.
Edition: Free.
Known limits: a threshold outside 0–1 returns "threshold" must be a number between 0 and 1.. The form details are in the Forms, dynamic data, components, bindings and media section.
onboarding group
What it does: hides the first-run panel of the Overview for the current user.
How to use it: "Don't show again" button of the Overview.
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
dismissed | boolean | true, false | false | User meta nucleo_onboarding_dismissed. false deletes it |
Permissions: manage_options, as for all of nucleo/settings-set.
Edition: Free.
Known limits: a user without manage_options cannot close the first-run panel, because the ability rejects the call.
Detected integrations
What it does: lists the plugins Nucleo recognizes and what it does with each one.
How to use it: integrations tab, field integrations of nucleo/settings-get. Recognized plugins: WooCommerce, Polylang, WPML, Yoast SEO, Rank Math, Contact Form 7, Complianz, Cookiebot, CookieYes and iubenda.
Permissions: manage_options.
Edition: Free.
Known limits: detection checks only that the plugin is present and does not verify versions. The details are in the Integrations section.
Options saved by this area
What it does: summarizes the WordPress options written by the backend.
| Option | Content | Written by |
|---|---|---|
nucleo_settings | editor.textOnlyRoles | nucleo/settings-set |
nucleo_woo_fragments | keep or absent | nucleo/settings-set |
nucleo_purge_safelist | list of selectors | nucleo/settings-set |
nucleo_service | {url, key} | nucleo/settings-set |
nucleo_captcha | {provider, siteKey, secret, threshold} | nucleo/settings-set |
nucleo_oauth_dcr | boolean, dynamic registration | AI agents page |
nucleo_oauth_domains | list of allowed domains | AI agents page |
nucleo_license | {key, valid, entitled, expires}, without autoload | License page (Pro) |
nucleo_content_model | content model, without autoload | nucleo/model-set |
nucleo_icons | site icons, without autoload | nucleo/icons-set, nucleo/site-options-set |
nucleo_gaps | reported gaps, without autoload | nucleo/gap-report |
Transients: nucleo_license_check (1 day), nucleo_license_flash_<user> (1 minute), nucleo_fields_errors_<user> (5 minutes), nucleo_oauth_secret_<user> (60 seconds) and nucleo_quality_badge.
Edition: Free, except nucleo_license.
06Content model and fields
Model format
What it does: describes content types, taxonomies and field groups in a JSON object.
How to use it: it is read with nucleo/model-get, checked with nucleo/model-validate, and saved with nucleo/model-set or from the Content model page. It is saved in the option nucleo_content_model.
Parameters: root {schema: 1, postTypes, taxonomies, fieldGroups}.
| Object | Required keys | Optional keys |
|---|---|---|
postTypes[] | slug, singular, plural | public (default true), hasArchive (default false), rewrite (default the slug), supports (default ["title"]), icon |
taxonomies[] | slug, singular, plural | postTypes, hierarchical (default false), public (default true) |
fieldGroups[] | id, title, location ({postType} or {taxonomy}), fields | — |
fields[] | key (^[a-z][a-z0-9_]{0,31}$), type, label | required, help, min, max, step, options ({value, label}), multiple, postTypes, fields |
Field types: text, textarea, number, url, email, image, date, select, boolean, relation, repeater.
Slugs: ^[a-z][a-z0-9_-]*$.
Permissions: manage_options for the three abilities. The scope of nucleo/model-get and nucleo/model-validate is nucleo:read, that of nucleo/model-set is nucleo:design.
Edition: Free. relation, repeater and the taxonomy location are Pro.
Known limits: nucleo/model-set is partial. A postTypes, taxonomies or fieldGroups part not sent stays as it is. A part sent replaces the whole list.
Model validation
What it does: checks the model before saving.
How to use it: first the JSON schema (code schema), then the WordPress and edition rules.
Parameters: error codes, each with a path in JSON Pointer format.
| Code | When |
|---|---|
schema | The model does not follow the schema |
slug_length | Type slug over 20 characters, taxonomy slug over 32 |
reserved_slug | Slug in post, page, attachment, revision, nav_menu_item, action, author, order, theme, category, post_tag, link_category, post_format, or with prefix wp_. Also slugs already registered by WordPress, by a plugin or by the theme |
duplicate | Repeated type or taxonomy slug, group id or field key. Keys are unique per position (type or taxonomy) |
unknown_target | Type or taxonomy referenced but neither declared nor registered |
nested_repeater | A repeater inside another repeater |
Permissions: manage_options.
Edition: Free, with the Pro rules above.
Known limits: a slug already in the saved model, or registered by the model in the same request, does not count as registered by others. An error on a part not sent explains that this part must be sent too.
Destructive model changes
What it does: compares the saved model with the new one and finds the changes that lose data.
How to use it: the comparison returns added, removed, changed and destructive. The ids have the form postType:<slug>, taxonomy:<slug> or field:<group>/<key>.
Destructive changes lose data. nucleo/model-set writes only if every destructive id is in confirm.
Parameters: destructive changes.
| Case | Reason returned |
|---|---|
| Type removed with content | post type has N items |
| Taxonomy removed with terms | taxonomy has N terms |
| Field removed with values | field has N saved values |
| Field type changed with values | field type changed, N saved values |
Permissions: manage_options.
Edition: Free.
Known limits: the content count excludes automatic drafts and the trash.
Registering types, taxonomies and meta
What it does: registers the model's types, taxonomies and meta in WordPress.
How to use it: the registration is automatic on init, in the admin and on the public site. If the store is empty and the tokens are missing, it reads the option nucleo_content_model.
- Types and taxonomies have
show_in_rest: true. - Each field becomes a
singlemeta with the REST schema of the type:numberbecomes number,booleanbecomes boolean,imagebecomes integer,relationbecomes integer or an array of integers,selectbecomes string or array,repeaterbecomes an array of objects. Others become string.
Permissions: none.
Edition: Free.
Known limits: a type or taxonomy already registered by other code is not registered. The origin becomes conflict.
Types allowed in the content and terms abilities
What it does: decides which types and taxonomies the content-* and terms-* abilities can read and write, and where they come from.
How to use it: a type is allowed if it is registered with show_ui.
- Excluded types:
revision,attachment,nav_menu_item,custom_css,customize_changeset,oembed_cache,user_request,product,product_variation, and the prefixesnucleo_,wp_andshop_. - Excluded taxonomies:
nav_menu,link_category,post_format, the prefixesnucleo_,wp_,product_andpa_, and those without an allowed type. - Origin (
registeredBy):nucleo-model,wordpress,plugin-or-theme,conflict.
Permissions: with $editable, the inventory keeps only the types with edit_posts and the taxonomies with manage_terms.
Edition: Free.
Known limits: system pages cannot be trashed: the home page, the posts page, the privacy policy page and the WooCommerce pages (shop, cart, checkout, my account, terms). Details in nucleo/content-upsert and nucleo/terms-set.
Field panels
What it does: shows a panel for each field group in the edit screen of the type (post.php, post-new.php).
How to use it: the panel appears if the group has location.postType equal to the type. Saving happens with the post.
repeater: rows with add, move and remove, with themaxlimit.image: choice from the media library.relation: search among WordPress content, with 10 results.
Parameters: POST field nucleo_fields[<key>], nonce nucleo_fields_nonce (action nucleo_fields).
Permissions: edit_post on the post. Saving skips autosaves and revisions.
Edition: Free. The relation and repeater fields exist only with a saved model in Pro.
Known limits: with an error, no field is saved. The errors appear as a "Fields not saved:" notice at the next load, for 5 minutes.
Term fields
What it does: shows the fields of the groups with location.taxonomy in the add and edit forms of the terms.
How to use it: the values are saved on the keys created_<taxonomy> and edited_<taxonomy>.
Parameters: as for the field panels.
Permissions: edit_term on the term.
Edition: Free and Pro.
Known limits: the taxonomies are read from the model when the form loads.
Field values
What it does: validates, normalizes and saves the values of the model's fields on posts and terms.
How to use it: field panels, term fields, the Fields tab of the editor, nucleo/fields-get, nucleo/fields-set, nucleo/content-upsert and nucleo/terms-set.
Parameters: rules by type.
| Type | Allowed value |
|---|---|
text, textarea | String, sanitized |
url | http or https URL |
email | Valid email address |
date | Y-m-d |
number | Finite number, within min and max |
boolean | true, 1, '1', false, 0, '0'. Saved as '1' or '0' |
image | ID of an image attachment |
relation | ID of a post, of the type in postTypes if given. With multiple, a list |
select | One value of options. With multiple, a list |
repeater | List of rows with only the declared subfields, between min and max rows |
Permissions: those of the caller.
Edition: Free.
Known limits: saving is partial and all-or-nothing. Codes: unknown_field, required, invalid_value, too_many and too_few. An empty value deletes the meta. Only the fields of the Nucleo model are written: the fields of other plugins stay with those plugins.
07Site functions
Site options
What it does: reads and writes the title, tagline, home page, posts page, language, date and time formats, business data, icons, image formats and favicon.
How to use it: nucleo/site-options-set, the site import (key site of the site.json file) and nucleo/site-describe.
Parameters: supported keys.
| Name | Type | Allowed values | WordPress option | Notes |
|---|---|---|---|---|
title | string | — | blogname | — |
tagline | string | — | blogdescription | — |
homepage | string or null | slug of a published page | show_on_front, page_on_front | null shows the posts |
postsPage | string or null | slug of a published page | page_for_posts | Must differ from homepage |
language | string | locale such as it_IT or it-IT | WPLANG | en_US is saved as an empty string |
dateFormat, timeFormat | string | PHP format, e.g. j F Y, H:i | date_format, time_format | Rejected if sanitizing changes it |
business | object or null | structured business data | — | Structured data for SEO |
icons | object | name → SVG | nucleo_icons | Replaces the whole set |
imageFormats | list | supported image formats | — | AVIF and WebP formats |
siteIcon | string or null | URL of an image in the media library | site_icon | null removes the favicon |
Permissions: manage_options, scope nucleo:admin. Downloading the language requires install_languages (or WP-CLI without a user) and direct access to the files.
Edition: Free.
Known limits: errors invalid_input, page_not_found, same_page and language_unavailable. The language is applied last: if the package does not download, the other options stay written. For child pages, the slug is the path (services/consulting).
Navigation menus
What it does: creates a WordPress menu by slug, replaces its items and exports the menus.
How to use it: nucleo/menu-list, nucleo/menu-set, the site import and export.
Parameters: an item has a label and one of these targets.
| Key | Example | Target |
|---|---|---|
url | https://… | Custom link |
page / post | about-us | Published page or post, by slug or path |
ref | home, archive:<type>, <type>:<slug>, term:<taxonomy>/<slug> | Home, archive, content or term |
children contains the child items.
Permissions: nucleo/menu-list requires edit_posts (scope nucleo:read). nucleo/menu-set requires edit_theme_options (scope nucleo:design).
Edition: Free.
Known limits:
- At most 3 levels.
- Errors:
invalid_itemsandmenu_target_missing. - The targets are resolved before the old items are deleted: a missing target does not leave the menu half-done.
- After writing, the layouts that use the menu are rebuilt at once.
- The export skips items without a published target.
Site icons
What it does: saves SVG icons for the nc/icon block, next to the built-in set.
How to use it: nucleo/icons-set (adds, replaces, removes) or the icons key of the site options, which replaces everything. In the nc/icon block, a site icon wins over a built-in icon with the same name.
Parameters:
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
| name | string | ^[a-z][a-z0-9-]{0,40}$ | — | — |
| SVG | string | SVG with viewBox and at least one allowed element | — | At most 20000 bytes |
Permissions: manage_options, scope nucleo:admin.
Edition: Free.
Known limits:
- At most 300 icons.
- Allowed elements:
svg,g,path,circle,ellipse,rect,line,polylineandpolygon. Others are removed. fillandstrokevalues other thannonebecomecurrentColor.- The rendering adds
width="24" height="24" focusable="false". - An empty set deletes the option
nucleo_icons.
Reported gaps
What it does: records what a design asks for and Nucleo cannot do, with the workaround used.
How to use it: nucleo/gap-report and nucleo/gap-list.
Parameters:
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
need | string | 1 to 500 characters | — | Required |
block | string | block name, e.g. nc/section-ref | '' | — |
workaround | string | at most 1000 characters | '' | — |
page | string | at most 200 characters | '' | — |
Permissions: nucleo/gap-report requires edit_pages (scope nucleo:write). nucleo/gap-list requires edit_posts (scope nucleo:read).
Edition: Free.
Known limits: the same pair block and need, without case, increases count and updates last and workaround. The last 200 gaps are kept.
Export, import and symbolic references
What it does: exports and imports the site as JSON files. It replaces the IDs with readable symbols (page:about-us, section:cta) and back.
How to use it: Tools page, nucleo/site-export, nucleo/site-import, wp nucleo export, wp nucleo import and wp nucleo sync.
Parameters: see the Import, export and sync section.
Permissions: manage_options, scope nucleo:admin.
Edition: Free.
Known limits: imported types: page, post, nucleo_layout and nucleo_section, in this order per folder: sections/, pages/, posts/, layouts/. Error codes: error, conflict, duplicate, not_json, invalid_document and quality_blocking. A value without a name stays numeric.
08Pro license and updates
Free and Pro packages
What it does: separates the Pro functions from the Free package.
How to use it: the Free package does not contain the Pro functions. The Pro package contains all of them.
Permissions: none.
Edition: Pro.
Known limits: the Pro module starts only outside the public site (admin, REST, CLI and cron), and only if it is present.
Active edition
What it does: decides whether Nucleo works as Pro.
How to use it: the filter nucleo/pro (default false) gives the edition. The value becomes true if the license is active. It stays true when the license of a site that was already active expires: the server answers reason: expired and the plugin saves entitled: true. In that case only updates stop. Revocation, a site that is not activated and deactivation turn the Pro functions off.
Parameters: filter nucleo/pro (boolean).
Permissions: none.
Edition: Pro.
Known limits: the public site does not check the edition. Popups, WooCommerce layouts and reduced CSS already created stay online without a license.
License activation
What it does: sends the key to the license server and saves the result.
How to use it: License page, "Already have a key?" form. admin-post action nucleo_license_activate, field license_key. The request goes to POST https://updates.nucleowp.dev/license/activate with body {key, site: home_url(), version}.
Parameters:
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
license_key | string | not empty | — | Spaces removed, sanitized |
Filter nucleo/license_api: base URL of the server.
Permissions: manage_options and nonce nucleo_license_activate.
Edition: Pro.
Known limits:
- Timeout of 10 seconds.
- With a network error or a response without a boolean
valid, nothing is saved and it shows "Activation failed: …". - With a valid response, it saves
nucleo_license{key, valid, expires}without autoload, even ifvalidis false, and clears the cache. - The result appears as a message for 1 minute.
License deactivation
What it does: frees the key on the server and removes it from the site.
How to use it: "Deactivate license", after confirmation. admin-post action nucleo_license_deactivate. The request goes to POST /license/deactivate.
Parameters: none.
Permissions: manage_options and nonce nucleo_license_deactivate.
Edition: Pro.
Known limits: the option nucleo_license and the cache are deleted even if the server does not respond.
License check
What it does: asks the server for the state of the key, at most once a day.
How to use it: the check runs only when WordPress checks the plugin updates. It sends POST /license/check and saves the result for one day. It updates valid and expires in nucleo_license.
Parameters: none.
Permissions: none (admin or cron context).
Edition: Pro.
Known limits: with a network error it keeps the saved validity and caches an error message.
Active license and expiry
What it does: says whether the license is valid now, without network.
How to use it: the license is active if valid is true and expires is absent or has not passed. The comparison uses the site date.
Parameters: none.
Permissions: none.
Edition: Pro.
Known limits: after the expires date, the edition returns to Free in the backend even before the next check. The Pro abilities are no longer registered, and the Pro items become locked again.
Pro plugin updates
What it does: provides WordPress with the version and the package of Nucleo Pro from its own server.
How to use it: for the Nucleo plugin, the server returns the following data.
| Key | Value |
|---|---|
slug | nucleo |
version | version from the license check |
url | https://updates.nucleowp.dev |
package | https URL of the server, only with a valid license; otherwise empty |
tested | installed WordPress version |
requires_php | 8.2 |
Parameters: none.
Permissions: none (WordPress update check).
Edition: Pro.
Known limits: without a valid license, WordPress sees the version but does not download the package. Other plugins on the same host are not affected.
09REST and admin-post actions
POST /nucleo/v1/preview
What it does: builds a document without saving it and returns the HTML, CSS and styles for the preview.
How to use it: the request body contains the document. The response contains the build result, plus the block and theme styles, if any, and the token CSS.
POST /wp-json/nucleo/v1/preview
{"document": {…}}Parameters:
| Name | Type | Allowed values | Default | Notes |
|---|---|---|---|---|
document | object | Nucleo document | — | Required |
Permissions: edit_posts.
Edition: Free.
Known limits: a document that is not an object returns invalid_input with status 400. An invalid document returns a result with ok: false.
admin-post actions
What it does: handles the forms of AI agents and License through admin-post.php.
How to use it:
| Action | Fields | Effect | Return |
|---|---|---|---|
nucleo_oauth_add_client | name, redirect_uri | Creates a pre-registered client | ?added=<client_id> or ?add_error=<code> |
nucleo_oauth_revoke_client | client_id | Revokes the client's active tokens | ?revoked=1 |
nucleo_oauth_delete_client | client_id | Deletes the client and its tokens | ?deleted=1 or ?deleted=0 |
nucleo_oauth_toggle_dcr | dcr_enabled (present = on) | Saves nucleo_oauth_dcr | ?saved=1 |
nucleo_oauth_add_confidential | name, redirect_uris | Creates a confidential client; the secret appears on the next page | ?confidential=1 or ?add_error=<code> |
nucleo_oauth_save_domains | domains | Saves nucleo_oauth_domains | ?saved=1 |
nucleo_oauth_write_htaccess | — | Writes the .htaccess rule for the Authorization header | ?htaccess=ok or ?htaccess=fail |
nucleo_license_activate | license_key | Activates the license (Pro) | License page with a message |
nucleo_license_deactivate | — | Deactivates the license (Pro) | License page with a message |
Parameters: each form has a nonce named after the action.
Permissions: manage_options. Without it, the response is 403.
Edition: Free for the OAuth actions, Pro for the license actions.
Known limits: the license actions exist only in the Pro package.
Other routes called by the backend
What it does: lists the REST routes used by the pages but registered outside this area.
How to use it:
GET /nucleo/v1/kit-preview?kit=<id>: kit thumbnail. Requiresedit_theme_optionsand the Pro edition. See the Kits section./nucleo/v1/mcp: MCP server. See the AI agents section.- WordPress routes:
/wp/v2/search,/wp/v2/media/<id>,/wp/v2/usersand/wp/v2/<taxonomy>.
Parameters: see the sections cited.
Permissions: see the sections cited.
Edition: see above.
Was this page helpful?