
Developing Datacloud Code Extension
Initialize, permission-scan, run locally, and deploy Salesforce Data Cloud code extensions (script or function projects) with the sf data-code-extension CLI.
Install
npx skills add https://github.com/forcedotcom/sf-skills --skill developing-datacloud-code-extensionWhat is this skill?
- Script and function project init via sf data-code-extension script|function init --package-dir
- Permission scan with --entrypoint, --dry-run, custom --config, and --no-requirements
- Local run against a target org: script run --entrypoint ./payload/entrypoint.py --target-org
- Deploy path requiring --package-dir ./payload with --name and org alias
- Quick-reference cheat sheet for scan/run/deploy flags and examples
Adoption & trust: 618 installs on skills.sh; 513 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Build is where you implement and wire custom transforms against Data Cloud; this skill is the integration shelf for that implementation loop. Integrations matches org-targeted CLI workflows (init, scan, run, deploy) that connect custom Python entrypoints to Salesforce Data Cloud.
Common Questions / FAQ
Is Developing Datacloud Code Extension safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Developing Datacloud Code Extension
# Data Cloud Code Extension - Quick Reference ## Command Cheat Sheet ### Initialize Project ```bash # Create script project sf data-code-extension script init --package-dir <directory> # Create function project sf data-code-extension function init --package-dir <directory> # Examples sf data-code-extension script init --package-dir . sf data-code-extension script init --package-dir my-transform ``` ### Scan for Permissions ```bash # Basic scan sf data-code-extension script scan --entrypoint ./payload/entrypoint.py # Preview without saving sf data-code-extension script scan --entrypoint ./payload/entrypoint.py --dry-run # Custom config location sf data-code-extension script scan --entrypoint ./payload/entrypoint.py --config ./custom-config.json # Skip requirements.txt sf data-code-extension script scan --entrypoint ./payload/entrypoint.py --no-requirements ``` ### Run Locally ```bash # Basic run sf data-code-extension script run --entrypoint ./payload/entrypoint.py --target-org <org_alias> # With custom config sf data-code-extension script run --entrypoint ./payload/entrypoint.py -o <org_alias> -c custom-config.json # Examples sf data-code-extension script run --entrypoint ./payload/entrypoint.py --target-org afvibe sf data-code-extension script run --entrypoint ./payload/entrypoint.py -o afvibe ``` ### Deploy ```bash # Minimal deployment (MUST include --package-dir ./payload) sf data-code-extension script deploy \ --target-org <org_alias> \ --name <name> \ --package-version <version> \ --description "<description>" \ --package-dir ./payload # Full options sf data-code-extension script deploy \ --target-org <org_alias> \ --name <name> \ --package-version <version> \ --description "<description>" \ --cpu-size <CPU_L|CPU_XL|CPU_2XL|CPU_4XL> \ --package-dir ./payload # Examples (CRITICAL: Always include --package-dir ./payload) sf data-code-extension script deploy \ --target-org afvibe \ --name Employee_Upper \ --package-version 1.0.0 \ --description "Uppercase employee positions" \ --package-dir ./payload ``` ## Common Workflows ### New Project from Scratch ```bash # 1. Create directory mkdir my-transform && cd my-transform # 2. Initialize sf data-code-extension script init --package-dir . # 3. Edit payload/entrypoint.py with your transformation # 4. Scan sf data-code-extension script scan --entrypoint ./payload/entrypoint.py # 5. Test sf data-code-extension script run --entrypoint ./payload/entrypoint.py --target-org afvibe # 6. Deploy (MUST include --package-dir ./payload) sf data-code-extension script deploy \ --target-org afvibe \ --name MyTransform \ --package-version 1.0.0 \ --description "My transformation" \ --package-dir ./payload ``` ### Update Existing Code Extension ```bash # 1. Edit payload/entrypoint.py # 2. Re-scan sf data-code-extension script scan --entrypoint ./payload/entrypoint.py # 3. Test sf data-code-extension script run --entrypoint ./payload/entrypoint.py -o afvibe # 4. Deploy with new version (include --package-dir ./payload) sf data-code-extension script deploy \ -o afvibe \ -n MyTransform \ --package-version 1.1.0 \ --description "Updated transformation" \ --package-dir ./payload ``` ## Python Code Patterns ### Read/Write DLO ```python from datacustomcode import Client client = Client() # Read df = client.read_dlo('Employee__dll') # Transform df['new_field'] = df['old_field'].str.upper() # Write (modes: 'overwrite', 'append') client.write_to_dlo('Output__dll', df, 'overwrite') ``` ### Read/Write DMO ```python # Read df = client.read_dmo('EmployeeDMO') # Write (modes: 'upsert', 'insert') client.write_to_dmo('EmployeeDMO', df, 'upsert') ``` ### Multiple DLO Operations ```python # Read multiple employees = client.read_dlo('Employee__dll') departments = client.read_dlo('Department__dll') # Join merged = employees.merge(departments, on='dept_id') # Write multiple client.write_to_dlo('Enriched__dll', merged, 'overwrite')