DocumentationDownload

WordPress admin

Nucleo 0.2+Free~39 min readUpdated October 31, 2026

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/html and nc/shortcode blocks and the perf.html.block quality rule;
  • the nucleo/component-activate and nucleo/critical-request abilities;
  • 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-set with onboarding.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-create with type nucleo_layout and 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-list appear 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" calls nucleo/tokens-set with 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)

Pro

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-apply with dryRun: 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-set with confirm equal 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-scan page by page, until next is null.
  • 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)

Pro

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-request and nucleo/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>"}}}

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 (pre Pre-registered, cimd Metadata document, dcr Dynamic 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). The client_id appears 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 Authorization header. It writes a Nucleo block into the .htaccess of the root that passes the header to PHP.
  • "Revoke tokens" sets revoked = 2 on 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_dcr option.

Parameters: "Add agent" and "Add confidential agent".

NameTypeAllowed valuesDefaultNotes
namestring1 to 200 characters—Required
redirect_uriURLhttps, or http only on localhost or 127.0.0.1—Rules of the OAuth client registration
redirect_urisURL, one per lineas redirect_uri—Only for the confidential client
Warning

"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-rollback and doc-translate. It calls nucleo/doc-revisions, takes the second-to-last revision and, after confirmation, calls nucleo/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-export and downloads the file nucleo-export-YYYY-MM-DD.zip.
  • The import accepts a .zip or several .json files. It first calls nucleo/site-import with dryRun: true and shows the preview. "Import" repeats the call with dryRun: false.
  • "Overwrite changes made on the site" sets force after a confirmation with the list of files.
  • "Rebuild all" calls nucleo/cache-rebuild. The status comes from nucleo/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" calls nucleo/settings-set with only the group of the active tab.
  • integrations shows the detected plugins, read only. agents links 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.

StateConditionContent
freePro package absentPlans, Free and Pro comparison, FAQ and the "Open your account" link
inactivePro installed, no keyPlans and the "Already have a key?" form
invalidKey rejectedServer message
activeValid licenseMasked 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

Pro

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=edit on a Nucleo layout or section redirects to the Nucleo editor.
  • post.php on 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 responds quality_blocking; post.php keeps 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 n plus 7 base-36 characters.
  • Inspector: tabs "Content", "Settings" and "Style", generated from the node type. The style tab has a breakpoint bar base, md, lg and xl, and shows the inherited value. The src field of nc/image opens 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, duplicate and insert operations.
  • "Save" calls nucleo/doc-patch with baseRevision, ops and acknowledge.
  • "Publish" saves the structure, then the texts changed in the "Text only" view, then calls nucleo/doc-publish.
  • A quality problem with severity error blocks the save. To accept it, a reason is required, sent in acknowledge as {rule, node, reason}.
  • With a conflict error, 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:

TabAbilityContent
Layoutnucleo/layout-explain, nucleo/layout-listLayouts applied to the post URL by area, with links to the editor
Design systemnucleo/tokens-get, nucleo/tokens-setEditable colors, spacing and texts in read-only
Statusnucleo/statusVersions, store, documents and conflicts with other plugins
Assetnucleo/assets-report, nucleo/assets-rules-setAssets per template, suggestions with "Apply"
AI activitynucleo/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
Fieldsnucleo/fields-get, nucleo/fields-setFields 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.

DeviceSizeRotation
mobile390×844yes
tablet820×1180yes
desktop1440×900no
ultra2560×1080no

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:

KeysAction
Mod+ZUndo
Mod+Shift+ZRedo
Mod+SSave
Mod+DDuplicate the node (saves at once)
Del / BackspaceDelete the node, after confirmation
EscDeselect
/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.

NameTypeAllowed valuesDefaultNotes
textOnlyRoleslist of stringsslugs 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.

NameTypeAllowed valuesDefaultNotes
wooFragmentsstringkeep, offoffkeep saves the option nucleo_woo_fragments = keep. off deletes it. With off, Nucleo turns off the cart fragments on pages without a cart
purgeSafelistlist of stringsCSS 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

Pro

What it does: configures the external critical CSS service.

How to use it: service tab ("Critical CSS service").

NameTypeAllowed valuesDefaultNotes
urlstringhttps URL or empty''Option nucleo_service['url']
keystringany''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.

NameTypeAllowed valuesDefaultNotes
providerstring'', recaptcha, recaptcha-v3, hcaptcha, turnstile, friendly'''' turns the captcha off
siteKeystringpublic key''—
secretstringsecret key (Friendly Captcha: API key)''Write only: reading returns secretSet
thresholdnumber0 to 10.5Only 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.

NameTypeAllowed valuesDefaultNotes
dismissedbooleantrue, falsefalseUser 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.

OptionContentWritten by
nucleo_settingseditor.textOnlyRolesnucleo/settings-set
nucleo_woo_fragmentskeep or absentnucleo/settings-set
nucleo_purge_safelistlist of selectorsnucleo/settings-set
nucleo_service{url, key}nucleo/settings-set
nucleo_captcha{provider, siteKey, secret, threshold}nucleo/settings-set
nucleo_oauth_dcrboolean, dynamic registrationAI agents page
nucleo_oauth_domainslist of allowed domainsAI agents page
nucleo_license{key, valid, entitled, expires}, without autoloadLicense page (Pro)
nucleo_content_modelcontent model, without autoloadnucleo/model-set
nucleo_iconssite icons, without autoloadnucleo/icons-set, nucleo/site-options-set
nucleo_gapsreported gaps, without autoloadnucleo/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}.

ObjectRequired keysOptional keys
postTypes[]slug, singular, pluralpublic (default true), hasArchive (default false), rewrite (default the slug), supports (default ["title"]), icon
taxonomies[]slug, singular, pluralpostTypes, hierarchical (default false), public (default true)
fieldGroups[]id, title, location ({postType} or {taxonomy}), fields—
fields[]key (^[a-z][a-z0-9_]{0,31}$), type, labelrequired, 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.

CodeWhen
schemaThe model does not follow the schema
slug_lengthType slug over 20 characters, taxonomy slug over 32
reserved_slugSlug 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
duplicateRepeated type or taxonomy slug, group id or field key. Keys are unique per position (type or taxonomy)
unknown_targetType or taxonomy referenced but neither declared nor registered
nested_repeaterA 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>.

Warning

Destructive changes lose data. nucleo/model-set writes only if every destructive id is in confirm.

Parameters: destructive changes.

CaseReason returned
Type removed with contentpost type has N items
Taxonomy removed with termstaxonomy has N terms
Field removed with valuesfield has N saved values
Field type changed with valuesfield 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 single meta with the REST schema of the type: number becomes number, boolean becomes boolean, image becomes integer, relation becomes integer or an array of integers, select becomes string or array, repeater becomes 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 prefixes nucleo_, wp_ and shop_.
  • Excluded taxonomies: nav_menu, link_category, post_format, the prefixes nucleo_, wp_, product_ and pa_, 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 the max limit.
  • 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

Pro

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.

TypeAllowed value
text, textareaString, sanitized
urlhttp or https URL
emailValid email address
dateY-m-d
numberFinite number, within min and max
booleantrue, 1, '1', false, 0, '0'. Saved as '1' or '0'
imageID of an image attachment
relationID of a post, of the type in postTypes if given. With multiple, a list
selectOne value of options. With multiple, a list
repeaterList 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.

NameTypeAllowed valuesWordPress optionNotes
titlestring—blogname—
taglinestring—blogdescription—
homepagestring or nullslug of a published pageshow_on_front, page_on_frontnull shows the posts
postsPagestring or nullslug of a published pagepage_for_postsMust differ from homepage
languagestringlocale such as it_IT or it-ITWPLANGen_US is saved as an empty string
dateFormat, timeFormatstringPHP format, e.g. j F Y, H:idate_format, time_formatRejected if sanitizing changes it
businessobject or nullstructured business data—Structured data for SEO
iconsobjectname → SVGnucleo_iconsReplaces the whole set
imageFormatslistsupported image formats—AVIF and WebP formats
siteIconstring or nullURL of an image in the media librarysite_iconnull 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).

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.

KeyExampleTarget
urlhttps://…Custom link
page / postabout-usPublished page or post, by slug or path
refhome, 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_items and menu_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:

NameTypeAllowed valuesDefaultNotes
namestring^[a-z][a-z0-9-]{0,40}$——
SVGstringSVG 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, polyline and polygon. Others are removed.
  • fill and stroke values other than none become currentColor.
  • 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:

NameTypeAllowed valuesDefaultNotes
needstring1 to 500 characters—Required
blockstringblock name, e.g. nc/section-ref''—
workaroundstringat most 1000 characters''—
pagestringat 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

Pro

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

Pro

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

Pro

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:

NameTypeAllowed valuesDefaultNotes
license_keystringnot 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 if valid is false, and clears the cache.
  • The result appears as a message for 1 minute.

License deactivation

Pro

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

Pro

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

Pro

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

Pro

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.

KeyValue
slugnucleo
versionversion from the license check
urlhttps://updates.nucleowp.dev
packagehttps URL of the server, only with a valid license; otherwise empty
testedinstalled WordPress version
requires_php8.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:

NameTypeAllowed valuesDefaultNotes
documentobjectNucleo 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:

ActionFieldsEffectReturn
nucleo_oauth_add_clientname, redirect_uriCreates a pre-registered client?added=<client_id> or ?add_error=<code>
nucleo_oauth_revoke_clientclient_idRevokes the client's active tokens?revoked=1
nucleo_oauth_delete_clientclient_idDeletes the client and its tokens?deleted=1 or ?deleted=0
nucleo_oauth_toggle_dcrdcr_enabled (present = on)Saves nucleo_oauth_dcr?saved=1
nucleo_oauth_add_confidentialname, redirect_urisCreates a confidential client; the secret appears on the next page?confidential=1 or ?add_error=<code>
nucleo_oauth_save_domainsdomainsSaves nucleo_oauth_domains?saved=1
nucleo_oauth_write_htaccess—Writes the .htaccess rule for the Authorization header?htaccess=ok or ?htaccess=fail
nucleo_license_activatelicense_keyActivates 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. Requires edit_theme_options and 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/users and /wp/v2/<taxonomy>.

Parameters: see the sections cited.

Permissions: see the sections cited.

Edition: see above.

Esc
↑↓ to select↵ to openEsc to closeLocal search, no data sent