The Salesforce Developer’s Guide to the Summer ’25 Release

The Summer ’25 release is rolling out to your sandbox and production environments starting in April and continuing through June 2025. Get ready — this release includes product updates and new features to enhance your development experience. Whether you’re looking to build agents for your business, build a solid data foundation on Data Cloud, or work with Platform features for enhancing your applications, you’ll find significant new capabilities in this release.

Let’s take a look at the highlights for developers in Agentforce, Data Cloud, Apex, LWCs, developer tools, and APIs.

Agentforce features

Agentforce enables you to customize pre-built agents, or create and deploy new agents that work seamlessly across Salesforce apps, Slack, websites, and third-party platforms and apps. In the upcoming release, we’re adding some important features for developers. However, Salesforce releases Agentforce updates frequently, so keep an eye on the monthly release section of the Salesforce release notes for the latest information. 

Note: You can find features that went out before April in the monthly release section of the Spring 25 release notes.

Agentforce SDK

Define and interact with Agentforce programmatically in Python using the Salesforce Agentforce SDK. You can install the SDK using pip as shown below.

  pip install agentforce-sdk

The SDK provides features like the ability to create and manage AI agents in Salesforce via code, as well as generate and manage prompt templates with Salesforce field mappings. It also offers flexibility through support for various agent definition formats, including JSON, among other capabilities. Explore the repository for code examples to get started.

Agentforce DX (Beta)

You can now create and test agents directly in a Salesforce DX project with Agentforce DX’s pro-code tools, such as the Salesforce CLI and VS Code extensions for Salesforce. Install a dedicated VS Code extension for working with Agentforce.

Here’s a simple list of commands available in the CLI to manage and create Agents directly via the Salesforce CLI.

sf search

Use ↑ and ↓ keys or type to search for a command.
Press ENTER to view help. Press ESC to exit.

? Search for a command agent
❯ agent create
agent generate agent-spec
agent generate template
agent generate test-spec
agent preview
agent test create
agent test list
agent test results
agent test resume
agent test run
org open agent
(Move up and down to reveal more choices)
Create an agent in your org from a local agent spec file.

Lightning types and LWCs for default Agentforce (Developer Preview)

You can now bring structured user interfaces to Agentforce (Default) using the standard Lightning types offered out of the box and the custom Lightning web components (LWCs). To create a custom Lightning type, you’ll need to create a new metadata type bundle called LightningTypeBundle. The bundle consists of a schema, editor, and renderer. Once you have the bundle type, you’ll reference them in your LWC’s meta XML.

Use the new lightning__AgentforceInput and lightning__AgentforceOutput targets to enable LWCs within agent actions for custom input and output rendering. Below is a code snippet that shows how to expose LWCs for output rendering in Agentforce.

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>64.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AgentforceOutput</target>
    </targets>
</LightningComponentBundle>

Below is an example of bringing a user interface using LWCs into Agentforce (Default).


Screenshot of the LWC user interface within Agentforce (Default)

To learn more about building LWCs and LightningTypeBundle, refer to the code examples in the developer documentation. Note that this feature is in Developer Preview and only available for the Agentforce (Default) type agents.

Additionally, you can now view a list of the Lightning types available in your org from the Setup UI. Below is a screenshot that shows the available Lightning types.


Screenshot of the list view showing Lightning types

Agent Connections (Beta)

Agent Connections enable Agentforce Service Agents to use rich content formatting. These surfaces adapt to various channels. Currently, two standard adaptive responses are supported: rich link response (Beta) and rich choice response (Beta).

The screenshot below shows how to turn on adaptive response formats in Agent Builder.


Screenshot showing how to turn on adaptive responses in Agent Builder for Agentforce Service Agents

External objects support in Prompt Builder

You can now bring external objects into Prompt Builder. External objects let you bring large-volume data from external systems into Salesforce without having to store the data in Salesforce. You can now create a prompt template of type Flex, select an external object, and then access that object’s fields just as you would with a custom or standard object.

The screenshot below shows how you can create a Flex template with external objects used for grounding.


Screenshot showing the external object type in prompt template

Agentforce for identity

Agent for Setup can now create external client apps. With the Create External Client App action, you can create and configure your external client app by asking the Agent for Setup.

The screenshot below shows Agent for Setup in action, helping users create external client apps through a conversational experience.


Screenshot showing how to create external client apps via Agent for Setup

Package Agentforce actions, topics and prompt templates

Agentforce actions, topics, and prompt templates can now be packaged as a 2GP managed package and distributed on the AgentExchange.

Data Cloud release highlights

Like Agentforce, Data Cloud gets updates every month, so please keep an eye on the monthly release notes section for Data Cloud to learn more. If you missed features released the previous month, check out the monthly release notes section for the Spring ’25 release.

Related list enrichments

  • Create related list enrichments for accounts, cases, contracts, and vehicles using direct relationships between Data Cloud DMOs and Salesforce objects (direct-DMO), without requiring identity resolution
  • Deploy related list enrichments (excluding direct-DMO) from a Data Cloud sandbox to a CRM production org

Copy field enrichments

You can now add copy field enrichments to cases, contracts, orders, products, and quotes. With the additional objects enabled, you can enrich more Salesforce objects with field data from Data Cloud.

Log Flow execution data to Data Cloud

You can now log Flow executions for auto-launched and scheduled flows directly to Data Cloud, ensuring reliable and scalable data management. Here is how to turn on this feature:

  • Open your flow
  • Click the gear icon, and then click Show Advanced
  • Click Install and Set Up Package
  • After installation and setup, select Collect and log metrics in Data Cloud for this flow

Note that logging Flow execution will consume Data Cloud credits.

The screenshot below shows how to find the installation screen.


Screenshot showing the install and set up package process for logging Flow execution metrics

Apex enhancements

Dynamic formula evaluation in Template mode

Use the new FormulaBuilder.parseAsTemplate() method to evaluate dynamic formulas using merge field syntax {!Object_Name.Field_Name}, making code cleaner. In Template mode, you can create formula expressions where values are interpolated into a string by using the merge field syntax {!Object_Name.Field_Name}.

Here is a simple example code snippet of using the FormulaBuilder class with parseAsTemplate method.

Contact con = [SELECT Id, FirstName, LastName, Title, Account.Name
               FROM Contact
               WHERE AccountId != null AND Title != null AND FirstName != null AND LastName != null
               ORDER BY CreatedDate DESC
               LIMIT 1];
if (con != null) {
    FormulaEval.FormulaInstance summaryFormula = Formula.builder()
        .withType(Schema.Contact.class) // Context is Contact
        .withReturnType(FormulaEval.FormulaReturnType.STRING) // We want a summary string
        // The literal spaces, comma, and "at" will be handled by the template evaluation.
        .withFormula('{!FirstName} {!LastName}, {!Title} at {!Account.Name}') 
        .parseAsTemplate(true) // Enable template mode interpolation
        .build();

    try {
        // Evaluate the formula using the Contact record data
        String contactSummary = (String) summaryFormula.evaluate(con);

        // Expected Output (using your example data): 'Geoff Minor, President at Global Media'
        System.debug('Contact Summary: ' + contactSummary);

    } catch (Exception e) {
        // Catch potential evaluation errors (e.g., if a required field used in the template is unexpectedly null)
        System.debug('Error evaluating contact summary formula: ' + e.getMessage());
    }

} else {
    System.debug('No suitable Contact record found for the example.');
}

Setting to enable org-wide enablement of debug logs during metadata deployment

Debug logs during metadata deployment are turned off by default for performance reasons. We now allow you to enable it if needed via an org-wide setting or using Metadata API. For Metadata API, check the enableDebugLogsDuringDeployment field in ApexSettings.

Crypto class enhancements

The Crypto class now supports the AES-GCM mode for 128-bit, 192-bit, and 256-bit encryption/decryption and the P1363 signature format for signing/verifying.

Here is a code snippet that shows the AES-GCM mode in action.

// Example: AES-GCM Encryption
Blob key = Crypto.generateAesKey(256); // Generate a 256-bit key
Blob dataToEncrypt = Blob.valueOf('Sensitive Data');
Blob additionalData = Blob.valueOf('Contextual Info'); // Optional additional authenticated data

// Encrypt using AES256-GCM mode
Blob encryptedData = Crypto.encryptWithManagedIV('AES256-GCM', key, dataToEncrypt, additionalData);

// Decrypt (requires the same key and additionalData)
Blob decryptedData = Crypto.decryptWithManagedIV('AES256-GCM', key, encryptedData, additionalData);
System.assertEquals(dataToEncrypt, decryptedData);

LWC enhancements

Preview a single Lightning web component using Local Dev (Beta)

You can now preview a single LWC using Local Dev without needing to publish it to an org first. 

Here are the steps to preview a single LWC:

Install the Local Dev CLI plugin with sf plugins install @salesforce/plugin-lightning-dev

  • Run sf lightning dev component on the command line
  • In the CLI output, use arrow keys to choose a component
  • Local Dev automatically opens the selected component in a new single component preview browser page

This repository holds the CLI plugin documentation with the list of available commands.

Lightning base component updates

Internal DOM structures for components like lightning-tree-grid, lightning-user-consent-cookie, and lightning-quick-action-panel are changing to prepare for native shadow DOM. Ensure that tests don’t rely on the previous internal structure.

SLDS Validator & Linter (Beta)

Use the SLDS Validator extension for VS Code or the new command-line SLDS Linter (Beta) to validate your code against SLDS guidelines, including the SLDS 2 beta rules, and apply automatic fixes. Check out the SLDS linter project on GitHub to learn more. 

Strict access check

We have now enabled stricter access checks when components import or reference other components or modules. Resolve any “No COMPONENT or MODULE named…” errors by checking import statements and ensuring that managed package components are properly exposed. 

To learn more about this, check out the documentation.

Platform development tools

Salesforce CLI

Manifest generation: An improved project generate manifest command includes the --excluded-metadata flag. Check examples in the documentation to learn how to use them.

Decompose ExternalServiceRegistration (Beta): The ExternalServiceRegistration metadata type can now be decomposed into .yaml and .xml files for easier source control management. Enable with:

sf project convert source-behavior --behavior decomposeExternalServiceRegistrationBeta

Improved Apex test output: project deploy start with --test-level and --verbose now shows duration for each test in human-readable output.

Snapshot org creation: Simplified scratch org creation from snapshots using the new --snapshot flag on org create scratch removes the need for a definition file. An example command is shown below.

sf org create scratch --alias my-scratch-org --target-dev-hub MyHub --snapshot NightlyBranch --wait 10

Wait for org resume scratch: Use the new --wait flag with org resume scratch to specify how long the command should poll for completion. An example command is shown below.

sf org resume scratch --job-id 00Dxxxxxxxxxxxxxxx --wait 10

Flow testing and debugging

We’ve made several enhancements to improve the flow debugging capabilities. You can read about them in the documentation.

An enhancement worth noting is: now you should be able to run a flow test via your CI/CD pipeline or from the Salesforce CLI command line. Use the command below to run flow tests.

sf flow run test

DevOps testing 

DevOps Testing extends the capabilities of DevOps Center by bringing AI-powered testing and quality control into your DevOps pipeline. If you’re using DevOps Center, install the additional DevOps Testing package from the AppExchange.

Once installed, you can configure it and bring in quality gates like Salesforce Code Analyzer and third-party tools from our partners. To learn more about this, check out the official documentation.

Code Analyzer v5 is GA

‌Code Analyzer v5 is now generally available. The previous v4 version is set to retire in August 2025, so plan to migrate to the improved v5, which now comes with these features:

  • Two new engines: Flow Scanner and Regular Expressions
  • AI-powered quick fixes by Agentforce for Developers (works for Apex for now, LWC in the future)
  • A single command to execute Code Analyzer
  • A brand new, highly polished HTML report
  • A completely new YAML configuration file
  • New integrations with DevOps Testing, GitHub Actions

To learn more about these features, check out the official documentation.

API updates

Metadata API updates

Retrieve with dependencies: Use the new rootTypesWithDependencies parameter in RetrieveRequest to retrieve metadata types along with their dependencies automatically.

Look for the feature rolling out with selected metadata types in the Salesforce CLI release notes in a few weeks.You can see that the source-deploy-retrieve npm package already supports rootTypesWithDependencies. In this release, we only support the Bot metadata type for rootTypesWithDependencies to support retrieving Agentforce-related metadata and dependencies.

Deploy and retrieve pilot metadata types: You can now enable developers working in your org to deploy and retrieve pilot metadata types. Pilot metadata types are only guaranteed to work with the current API version and can be changed or removed in future releases. The screenshot below shows how to enable usage of pilot metadata types.


Screenshot showing how to enable usage of pilot metadata types

New Metadata Coverage report: There is a new Metadata Coverage report. The older one will retire after Summer ’25 release.

OpenAPI for sObjects REST API (Beta)

Query for all available resources using /async/specifications/oas3, and use wildcards * in URIs. To learn more, check out the documentation.

Legacy API version retirement (versions 21.0 to 30.0)

Retirement will be enforced in Summer ’25. Applications using these legacy API versions will fail after Summer ’25, so be sure to upgrade applications to current API versions before then. Use the API Total Usage event to identify requests using older versions. You can enable rejection of these versions early via release updates. Here’s a blog post that suggests tools and a strategy to accompany you for the API version retirement.

My Domain Login URL enforcement in API calls

To prevent disruption from instance changes, ensure API traffic uses your org’s My Domain login URL. This update is available in Summer ’25 and will be enforced in Spring ’26 (Winter ’26 for sandboxes).

Streaming API clients can receive disconnect messages from Salesforce app servers

In Streaming API version 64.0 and later, clients might experience disconnections and will need to reconnect to the API endpoint. These disconnects occur more often on Hyperforce instances due to infrastructure auto-scaling. To maintain an active subscription, implement a listener for the /meta/disconnect channel and establish a reconnection process upon receiving a disconnect message.

More Summer ’25 learning resources

About the author

Mohith Shrivastava is a Principal Developer Advocate at Salesforce with 14 years of experience building enterprise-scale products on the Salesforce Platform. Mohith is currently among the lead contributors on Salesforce Stack Exchange, a developer forum where Salesforce Developers can ask questions and share knowledge. You can follow him on LinkedIn.

The post The Salesforce Developer’s Guide to the Summer ’25 Release appeared first on Salesforce Developers Blog.