About sf-multiframework
sf-multiframework is a Salesforce development skill for building hosted React or Angular frontend apps while preserving the project's existing framework and authoring tools. It covers templates, data access, deployment, permissions, and troubleshooting, with guidance on platform constraints and app containers.
Key features
- 01Guidance for React and Angular app templates
- 02UI Bundle metadata and project structure
- 03GraphQL, REST, and platform SDK usage
- 04Testing, deployment, and permission checks
- 05App container selection and troubleshooting
Use cases
- 01Create a frontend app hosted by Salesforce
- 02Add a UI Bundle to an existing DX project
- 03Query and modify Salesforce data
- 04Diagnose deployment, access, or routing issues
MCP support
The skill describes deployment within the user's authorized scope through Salesforce DX MCP tools and requires using the schemas actually exposed by those tools.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dylandersen/ sf-multiframework --skill sf-multiframeworkAfter installing, type/sf-multiframeworkin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
LICENSEREADME.md.gitignoreCHANGELOG.mdCREDITS.mdassets/README.mdassets/examples/AccChatPanel.tsxSingleRecord.tsxglobal.cssgraphqlClient.tslistAccountsQuery.graphqlassets/templates/MyApp.app-meta.xmlcodegen.ymlexternal-content.jsonui-bundle.jsonmyApp.uibundle-meta.xmlvite.config.tsreferences/activation-checklist.mdacc-integration.mdangular.mdauthoring-surface.mdbeta-to-ga-migration.mdexperience-cloud-runbook.mdci-deploy.mdgraphql-workflow.mderror-handling.mdcli-guide.mdlayout-patterns.mddata-sdk.mdllm-ui-patterns.mdDetails
From the project READMESalesforce Multi-Framework
Build self-contained frontend apps hosted by Salesforce as UIBundle metadata.
React and Angular have documented templates; preserve the user's framework and
authoring tool. LWC remains the native choice for reusable platform components.
This skill was reviewed on October 8, 2026. Use official-sources.md for current primary links, research findings, and scope-specific release status. Check the target org, installed CLI help, package lockfile, and package declarations when details vary. Treat historical demo fixes and recipe conventions as local guidance.
Choose the relevant references
Read only what the task needs; the optional app patterns are not prerequisites.
| Task | Read |
|---|---|
| First app, org eligibility, domain setup | overview.md, setup.md, activation-checklist.md |
| Scaffold or repair metadata | templates.md, project-structure.md, cli-guide.md |
| Angular implementation | angular.md |
| Record queries, mutations, REST, schema/codegen | data-sdk.md, graphql-workflow.md, error-handling.md |
| Custom labels, SDK extensions, locale formatting, app identity, host UI | platform-capabilities.md |
| Agentforce Employee Agent chat | acc-integration.md |
| Embed an app in Lightning or an Experience page | microfrontends.md |
| External site, guest and authenticated users | templates.md, experience-cloud-runbook.md, permissions-csp.md |
| Tests, deployment, App Manager, access | testing.md, ci-deploy.md, permissions-csp.md |
| Managed/unlocked 2GP distribution | packaging.md |
| Existing Beta app | beta-to-ga-migration.md |
| Framework choice, failure diagnosis | lwc-vs-react.md, troubleshooting.md |
| Styling or React navigation | styling.md, react-router.md |
| Authoring-tool setup | authoring-surface.md |
| Educational recipes | recipe-conventions.md |
| Requested workspace shell or custom LLM interface | layout-patterns.md, llm-ui-patterns.md |
| Requested scored audit | scoring-rubric.md — local rubric, not Salesforce certification |
Essential decisions
Infer framework, audience, org alias, existing project structure, and requested
features from the workspace before asking. Distinguish internal CustomApplication
apps from external Experience app containers, and both from iframe embedding.
A new app does not imply permission to change org-wide settings or publish it.
Eligibility is Enterprise, Performance, Unlimited, Developer, or Partner Developer editions on Hyperforce, excluding Alibaba Cloud and Government Cloud. Internal hosting needs the Salesforce app domain and Salesforce Edge Network. Do not infer eligibility from the labels "sandbox" or "production" alone.
Platform invariants
- Run npm commands in the bundle directory, not the DX project root. Follow the generated framework scripts and preserve Salesforce build/proxy integration.
- A bundle's XML uses
isActiveand an integer schemaversion(normally1). Internal apps need a companion CustomApplication with a qualifieduiBundlereference, such asc__myApp; external apps need all four site metadata types. ui-bundle.json.outputDirmust contain the built assets. Userouting.fallback: "index.html"for an SPA. Its optionalapiVersionis a documentedvXX.Xstring, distinct from DXsourceApiVersion: "XX.X".- Use
@salesforce/platform-sdk/datafor Salesforce requests; prefersdk.graphql?.query({ query, variables })for reads andsdk.graphql?.mutate({ mutation, variables })for writes. Usesdk.fetch?.()for supported REST APIs. Never substitute rawfetch/axiosto Salesforce. - Guard missing SDK capabilities and missing
result.data. Distinguish an unavailable surface or failed request from a successful query with zero rows. Use org schema/generated types; field envelopes such asName { value }coexist with scalars such asId. - Queries provide
subscribe()andrefresh(); clean up subscriptions. These are cache/refresh notifications, not a server push subscription. Mutations do not update the query cache; refresh the relevant query after a write. - Cache stores partition by base URL and API version; query keys also include
headers. A cold
only-if-cachedrequest resolves witherrors[].extensions.code === "CACHE_MISS", rather than throwing. - HTTP callbacks belong under
webapp.onStatus, keyed by status code. Allow normal surface detection; do not invent a lowercase"webapp"override. - App visibility, API Enabled, object/field access, and record sharing are separate grants. Deploying an access permission set does not assign it. UI API security does not automatically secure custom Apex REST logic.
- Use standard npm/framework APIs inside the app. LWC virtual imports such as
@salesforce/apex/*,@salesforce/schema/*,lightning/*, and@wireare unavailable. Supported platform SDK/view,/i18n, and/data/extensionsentry points are valid; do not ban every@salesforce/*package. - ACC's verified package export is
embedAgentforceClient, with nestedagentforceClientConfig. Verify declarations before copying oldcreateAccWidgetexamples. External Service Agent chat uses Enhanced Chat v2. - Build before metadata deployment; include companion metadata and inspect the deployed app as its intended user. The bundle limit is up to 2,500 files. Preserve sourcemaps when managed AppExchange review requires them.
Typical authoring path
For a new complete app, select reactinternalapp, reactexternalapp,
angularinternalapp, or angularexternalapp with sf template generate project.
For a bundle in an existing DX project, select reactbasic or angularbasic
with sf template generate ui-bundle; supply the companion metadata separately.
Check installed command help rather than treating full-project templates as
legacy bundle templates.
Install dependencies inside the bundle. Retrieve the authorized org's GraphQL schema when needed, generate operation types with the project's scripts, and run the framework's dev server. Local development and Live Preview do not prove that deployed permissions, sessions, CSP, or deep routes work.
Run the existing lint/build and relevant tests. Deploy through the user's CLI or available Salesforce DX MCP tools within the requested scope. Use actual exposed MCP schemas rather than hardcoded tool identifiers. Launch through App Launcher or the Experience site, assign authorized access grants, and verify records, write results, and route refreshes. Record which checks were local and which used the deployed org.
assets/README.md routes to adaptable metadata and React examples; use official templates for complete React or Angular projects. The optional layout, chat, and scoring resources do not authorize additional work.