Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
forcedotcom avatar

Generating Ui Bundle Metadata

  • 2.2k installs
  • 763 repo stars
  • Updated July 24, 2026
  • forcedotcom/sf-skills

generating-ui-bundle-metadata scaffolds Salesforce UI bundles via sf template, meta XML, ui-bundle.json, and CSP trusted sites.

About

The generating-ui-bundle-metadata skill governs Salesforce UI bundle scaffolding and metadata when uiBundles/*/src/ exists or when editing ui-bundle.json, uibundle-meta.xml, or CSP trusted site files. Scaffolding must use sf template generate ui-bundle with --template reactbasic and alphanumeric bundle names only. After generation, replace all boilerplate, populate real home content, and configure a hosting target via companion skills for Experience sites or CustomApplication App Launcher entries. The uibundle-meta.xml requires masterLabel, version, isActive, and a target element because bundles without targets are invisible in the org. ui-bundle.json supports outputDir, routing rewrites and redirects, trailingSlash, and headers with strict path safety rules rejecting globs and parent segments. CSP Trusted Sites metadata maps external domains to img, connect, font, style, media, and frame directives whenever CDNs, APIs, or third-party assets appear in code.

  • Scaffold with sf template generate ui-bundle --template reactbasic only.
  • uibundle-meta.xml target Experience or CustomApplication is required for visibility.
  • ui-bundle.json routing, headers, and outputDir follow strict path safety rules.
  • CSP Trusted Sites register external domains by resource type directive.
  • Pair with site or custom-app skills after metadata scaffolding completes.

Generating Ui Bundle Metadata by the numbers

  • 2,240 all-time installs (skills.sh)
  • +7 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #206 of 2,277 Frontend Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

generating-ui-bundle-metadata capabilities & compatibility

Capabilities
sf template generate ui bundle react scaffolding · uibundle meta xml with experience or customappli · ui bundle.json routing redirects rewrites and he · csp trusted site metadata by directive type · path safety validation for outputdir and routing
Works with
salesforce
Use cases
frontend · api development
From the docs

What generating-ui-bundle-metadata says it does

A UI bundle deployed without a target will not appear anywhere — no App Launcher entry, no Experience Site URL.
SKILL.md
npx skills add https://github.com/forcedotcom/sf-skills --skill generating-ui-bundle-metadata

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2.2k
repo stars763
Security audit3 / 3 scanners passed
Last updatedJuly 24, 2026
Repositoryforcedotcom/sf-skills

How do I scaffold a Salesforce UI bundle with correct metadata, routing, and CSP for external domains?

Scaffold Salesforce UI bundle metadata with sf template generate, ui-bundle.json routing, uibundle-meta.xml targets, and CSP trusted sites.

Who is it for?

Salesforce projects with uiBundles/*/src/ needing new bundle scaffolding or metadata edits.

Skip if: Skip for generic create-react-app or Vite scaffolds outside Salesforce UI bundles.

When should I use this skill?

User edits ui-bundle.json, uibundle-meta.xml, CSP files, or runs sf template generate ui-bundle.

What you get

A React UI bundle with valid uibundle-meta.xml target, optional ui-bundle.json routing, and CSP registrations.

  • cspTrustedSite-meta.xml files
  • cspTrustedSites metadata directory

Files

SKILL.mdMarkdownGitHub ↗

UI Bundle Metadata

Scaffolding a New UI Bundle

Use sf template generate ui-bundle to create new apps — not create-react-app, Vite, or other generic scaffolds.

Always pass `--template reactbasic` to scaffold a React-based bundle.

UI bundle name (`-n`): Alphanumerical only — no spaces, hyphens, underscores, or special characters.

Example:

sf template generate ui-bundle -n CoffeeBoutique --template reactbasic

After generation: 1. Replace all default boilerplate — "React App", "Vite + React", default <title>, placeholder text 2. Populate the home page with real content (landing section, banners, hero, navigation) 3. Update navigation and placeholders (see the building-ui-bundle-frontend skill) 4. Configure a hosting target — a UI bundle without a <target> in its meta XML will not be visible in the org. Use generating-ui-bundle-custom-app for internal (App Launcher) apps or generating-ui-bundle-site for external (Experience Site) apps.

Always install dependencies before running any scripts in the UI bundle directory.

---

UIBundle Bundle

A UIBundle bundle lives under uiBundles/<AppName>/ and must contain:

  • <AppName>.uibundle-meta.xml — filename must exactly match the folder name
  • A build output directory (default: dist/) with at least one file

Meta XML

Required fields: masterLabel, version (max 20 chars), isActive (boolean). Optional: description (max 255 chars), target.

Target Field

The <target> element specifies where the UI bundle is hosted:

ValueUse CaseCompanion Metadata
ExperienceExternal-facing site via Digital ExperienceNetwork, CustomSite, DigitalExperienceConfig, DigitalExperienceBundle
CustomApplicationInternal app via Lightning App LauncherCustomApplication (applications/*.app-meta.xml)

A <target> is required for the app to be accessible in a Salesforce org. A UI bundle deployed without a target will not appear anywhere — no App Launcher entry, no Experience Site URL. Always pair the bundle with one of:

  • generating-ui-bundle-site (for Experience target)
  • generating-ui-bundle-custom-app (for CustomApplication target)

Example with Experience target:

<?xml version="1.0" encoding="UTF-8"?>
<UIBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <masterLabel>propertyrentalapp</masterLabel>
    <description>A Salesforce UI Bundle.</description>
    <isActive>true</isActive>
    <version>1</version>
    <target>Experience</target>
</UIBundle>

Example with CustomApplication target:

<?xml version="1.0" encoding="UTF-8"?>
<UIBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <masterLabel>propertymanagementapp</masterLabel>
    <description>A Salesforce UI Bundle.</description>
    <isActive>true</isActive>
    <version>1</version>
    <target>CustomApplication</target>
</UIBundle>

ui-bundle.json

Optional file. Allowed top-level keys: outputDir, routing, headers.

Constraints:

  • Valid UTF-8 JSON, max 100 KB
  • Root must be a non-empty object (never {}, arrays, or primitives)

Path safety (applies to outputDir and routing.fallback): Reject backslashes, leading / or \, .. segments, null/control characters, globs (*, ?, **), and %. All resolved paths must stay within the bundle.

outputDir

Non-empty string referencing a subdirectory (not . or ./). Directory must exist and contain at least one file.

routing

If present, must be a non-empty object. Allowed keys: rewrites, redirects, fallback, trailingSlash, fileBasedRouting.

  • trailingSlash: "always", "never", or "auto"
  • fileBasedRouting: boolean
  • fallback: non-empty string satisfying path safety; target file must exist
  • rewrites: non-empty array of { route?, rewrite } objects — e.g., { "route": "/app/:path*", "rewrite": "/index.html" }
  • redirects: non-empty array of { route?, redirect, statusCode? } objects — statusCode must be 301, 302, 307, or 308
headers

Non-empty array of { source, headers: [{ key, value }] } objects.

Example:

{
  "routing": {
    "rewrites": [{ "route": "/app/:path*", "rewrite": "/index.html" }],
    "trailingSlash": "never"
  },
  "headers": [
    {
      "source": "/assets/**",
      "headers": [{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }]
    }
  ]
}

Never suggest: {} as root, empty "routing": {}, empty arrays, [{}], "outputDir": ".", "outputDir": "./".

---

CSP Trusted Sites

Salesforce enforces Content Security Policy headers. Any external domain not registered as a CSP Trusted Site will be blocked (images won't load, API calls fail, fonts missing).

When to Create

Whenever the app references a new external domain: CDN images, external fonts, third-party APIs, map tiles, iframes, external stylesheets.

Steps

1. Identify external domains — extract the origin (scheme + host) from each external URL in the code 2. Check existing registrations — look in force-app/main/default/cspTrustedSites/ 3. Map resource type to CSP directive:

Resource TypeDirective Field
ImagesisApplicableToImgSrc
API calls (fetch, XHR)isApplicableToConnectSrc
FontsisApplicableToFontSrc
StylesheetsisApplicableToStyleSrc
Video / audioisApplicableToMediaSrc
IframesisApplicableToFrameSrc

Always also set isApplicableToConnectSrc to true for preflight/redirect handling.

4. Create the metadata file — follow implementation/csp-metadata-format.md for the .cspTrustedSite-meta.xml format. Place in force-app/main/default/cspTrustedSites/.

Related skills

Forks & variants (1)

Generating Ui Bundle Metadata has 1 known copy in the catalog totaling 1.5k installs. They canonicalize to this original listing.

How it compares

Pick generating-ui-bundle-metadata for Salesforce CSP XML metadata; use general security skills for non-Salesforce CSP headers.

FAQ

Why is a target required in uibundle-meta.xml?

Without Experience or CustomApplication target, the bundle deploys but appears nowhere in the org.

Can ui-bundle.json root be an empty object?

No. Root must be a non-empty object; empty routing objects and bare outputDir dot paths are invalid.

When must CSP Trusted Sites be created?

Whenever the app references a new external domain for images, APIs, fonts, styles, media, or iframes.

Is Generating Ui Bundle Metadata safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Frontend Developmentfrontendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.