Add the #DF24 Developer Keynote to your agenda. Join us in-person on 9/18 at 2:30 p.m. PT or on Salesforce+ at 5 p.m. PT for the must-see session built just for developers.

The Winter ’25 release starts rolling out to your sandbox and production environments from September through October 2024. Get ready — this release is packed with product updates and new features that will enhance your development experience. Whether you’re looking to add AI capabilities to your business, build a solid data foundation on Data Cloud, or work with platform features, you’ll find some significant new capabilities in this release.

Let’s take a look at the highlights for developers.

Apex enhancements

Preventing collection modification during iteration in Apex

In Apex, modifying a set while iterating over it used to be allowed before API version 61.0 (Summer ’24). However, this often led to unpredictable issues, like the iteration might skip elements, process elements multiple times, or throw an error. To prevent these problems, starting from API version 62.0, Apex now restricts these actions. Attempting to modify a set during iteration throws a “System.FinalException: Cannot modify a collection while it is being iterated” exception. This change ensures more reliable and consistent code execution.

Improved error messages for invalid SOQL

We now provide much more user-friendly error messages for invalid dynamic SOQL and SOQL issued via APIs. Go through the list of error message changes and be sure to update any code that depends on old SOQL error messages.

Support for negative currency values in dynamic SOQL

We also now support negative currency values in dynamic SOQL queries and queries executed via APIs. Below is an example query that previously would have errored out, but now works in dynamic Apex and via APIs. Note that this is still unsupported if you are writing a static SOQL.

The code snippet below now works if you have orgs with MultiCurrency enabled.

Track Apex Unexpected Exceptions with free-tier Event Monitoring

We notify you of unhandled exceptions via email. However, there’s a limit of 10 emails per hour per application server, which is shared across multiple orgs. Due to this limit, you might not always receive these emails. To address this, we are offering a free tier of Event Monitoring in this release, providing access to Apex Unexpected Exception event logs. You can now troubleshoot your Apex code by analyzing the information captured in the event log files for the Apex Unexpected Exception event type.

You can download the CSV file to uncover the error using the event browser, as shown in the screenshot below. Turn on Event Monitoring for your orgs to discover the logs.

Image showing how to download event logs via the Event Log file browser

Additionally, we now ensure that exceptions triggered by transactions with entry points, such as @AuraEnabled, @RestResource, and @InvocableAction annotations are captured in the Apex Unexpected Exception event type.

Mock SOQL tests for external objects

You can mock SOQL query responses for external objects in Apex testing using SOQL stub methods and a new test class. Look at the example code to learn how to extend the new system.SoqlStubProvider class and override the handleSoqlQuery() class method.

LWC enhancements

Develop LWC faster with Local Dev (Beta)

Local Dev (Beta) is now available in Winter ’25 sandboxes and scratch orgs for now. It allows you to preview your LWC instantly as you code — there is no need for page refreshes or reloads. We use hot module reloading and WebSockets to let you locally preview your LWC for LWR sites, mobile apps, and the Lightning Experience. To learn how to set up tooling and work with this feature, check out the documentation.

LWC API version 62.0 updates

With API version 62.0, we are bringing much-needed enhancements to LWC. You will need to update a component’s API version in its .js-meta.xml file to update the component version. Note that the features below work only if your LWC component version is 62.0 or above.

Class object bindings for managing styles

In LWC API version 62.0 and later, you can provide multiple classes on an element with a JavaScript array or object. By using class object binding, you no longer have to concatenate strings to pass in multiple classes.

Here is an example code showing class object bindings in action. Let’s say you have a button component with the HTML markup below:

And below is a JavaScript class that returns the computedClassNames as arrays with object types.

The above code would render the HTML as below with 62.0 and beyond.

In version 61.0, this would render as below:

The docs provide a handy table showing how class bindings render in API version 62.0 and beyond vs. 61.0 with different data types.

New this.style property

Starting with version 62.0, you can access a component’s host CSSStyleDeclaration (see docs) directly using this.style, regardless of whether you’re using light DOM or shadow DOM. In earlier versions (61.0 and before), you had to use this.children[0].parentElement.style for light DOM and this.template.host.style for shadow DOM. With 62.0, this.style simplifies this process. Here’s an example component showing how to set the style using this new property.

New this.hostElement property

In LWC API version 62.0 and later, you can access the parent element using this.hostElement in a renderedCallback or in another callback. This is a convenient syntax for this.template.host in shadow DOM that now works with light DOM too. Here is an example showing the usage of this.hostElement:

Upgrade your ESLint dependencies to prevent deployment-time issues

In LWC API version 62.0 and later, there are strict rules for exports and imports. We allow only named imports and exports going forward. Below are some export and import statements that are not allowed anymore.

GraphQL wire adapter is now supported in Experience Cloud sites

The GraphQL wire adapter lightning/uiGraphQLApi is also now supported in LWCs built for Experience Cloud LWR sites. Check out LWC Recipes to learn how to build with lightning/uiGraphQLApi.

Manage list views with new Lightning Web Component (LWC) wire adapters

List views render faster with this release, thanks to the LWCs. We have moved list views from Aura to LWC, and we want to share this love with all developers. Working with the list views is easier with new wire adapters added to lightning/uiListsApi (see docs). You can get a list view’s record data and update a list view’s preferences. You can also get the list views associated with an object, or the metadata for a list view object. To explore more, check out the new adapters listed in the release notes.

Support for Event objects in form base components

lightning-record-form, lightning-record-edit-form, and lightning-record-view-form LWC base components now support Event objects. You can read more in the docs.

Other miscellaneous updates

  • We now allow components with larger JavaScript files. The previous limit was 128KB, and we now support up to 1MB for JavaScript bundles.
  • We improved accessibility for base components like lightning-input.
  • Lightning Web Security auto enablement is postponed for now as we heard customers need more time.
  • Enabling and disabling LWS distortions can give you further insights into your component. Read the docs to learn how to use your browser console to do this. Additionally, new distortions are added with the Winter ’25 release.
  • In Winter ’25, additional components were adapted to prepare for native shadow DOM. This may affect your UI tests. If you use the UI Test Automation Model (UTAM) for your UI tests, make sure to update to get the latest UTAM Page Objects.

TypeScript support for LWC (Developer Preview)

Are you a TypeScript lover? Starting in Winter ’25, you can author your LWC components using TypeScript. Instead of JavaScript, you’ll build your code in TypeScript and run the TypeScript compiler to compile a JavaScript file. Below is an example component build using TypeScript with types.

This feature is in Developer Preview, and we want to hear your feedback via the Trailblazer Community. Check out the docs and let us know about your experience as we bring these features to production.

Data Cloud release highlights

Data Cloud sandboxes (Beta)

Data Cloud sandboxes are now available in Beta. The docs explain which features of Data Cloud these sandboxes support.

Vector search and hybrid search in Data Cloud

You can bring unstructured data into Data Cloud and create a search index for vector and hybrid search. Vector search produces semantically aware query results, while hybrid search combines vector search with keyword search to handle domain vocabulary and provide users with the most relevant results.

You can run vector search queries using Query API. This feature was released as a part of the August 2024 release. Below is an example query for all similar cases with the subject “line power failure” from unstructured case comments vectorized and indexed in Data Cloud.

Retrieval Augmented Generation (RAG) in Data Cloud

Retrieval Augmented Generation (RAG) is now available in Data Cloud, enabling AI models to generate more accurate and contextually relevant responses by leveraging unstructured data. With RAG, you can ground AI prompts using data sources like call notes, emails, video transcripts, and knowledge bases. This means that when Einstein AI generates a response, it can retrieve and incorporate relevant information from these unstructured data sources, making the responses more precise and aligned with your specific context, thus improving the response quality.

We also provide capabilities to manage retrievers now. A retriever returns relevant facts from textual data — which is indexed in the vector database — to augment a large language model (LLM) prompt. By augmenting prompts with accurate, current, and pertinent information, retrievers improve the value and relevance of LLM responses for users. Note that the RAG and retrievers were released as part of the August 2024 release. To learn more about how to use RAG with Data Cloud, refer to the documentation.

Lock and protect your custom metadata in a data kit

Data kits are how you package metadata for Data Cloud. You can now lock custom metadata in a data kit to prevent your subscribers from modifying it. This feature will be available in September.

Establish dependency between Data Cloud packages and Salesforce Platform packages

While a managed package can’t contain a mix of Data Cloud and other metadata in a single package, you can now create separate packages with dependencies in your orgs. We will provide more info on how to do this in September.

Cross-cloud Data Cloud updates

A number of cross-cloud updates are coming in the Winter ’25 release. Refer to the release notes to explore these features like support for more events capture from Experience cloud sites to Data Cloud integration and support for unified knowledge in Data Cloud for service cloud use cases. These features become available as part of the September release.

Agentforce features

Agentforce is Salesforce’s portfolio of AI agent technologies. In the Winter ’25 release, we are launching Agentforce Agents, which are AI systems that can understand user inputs and take actions to accomplish a goal autonomously using Salesforce Platform capabilities. Agentforce provides developers with tools and capabilities for building Agentforce Agents and Einstein Copilots on the Salesforce Platform.

Agentforce Agents

Agentforce Agents can understand inputs, plan tasks to accomplish a goal using LLMs, and take actions using Salesforce Platform capabilities to complete tasks autonomously. They come in two types: Einstein Copilots (an assistive type of agent, already available since Spring ’24), which assist humans collaboratively, and fully autonomous Agentforce Agents (available in Winter ’25 ) that work independently with safety measures in place and can hand off a task to humans when needed.

In Winter ’25, we will release pre-built agent templates shipped by Salesforce to address various jobs across Sales, Service, Commerce, and many others, with pre-configured roles, topics, and actions. You can customize these using Agent Builder (formerly known as Copilot Builder).

Agent Builder updates

Copilot Builder is now Agent Builder. With Agent Builder, you can customize out-of-the-box Agentforce Agents and copilots by defining topics and actions using prompts, flows, and Apex. This also includes the Advanced Planner, which is used to test the agent’s responses and plan of action. We will have more enablement sessions and content for you at Dreamforce.

Introducing topics in Agent Builder

Building copilots and agents is about to become even more efficient with the introduction of topics. When a user enters a question or request, instead of going through a list of all actions, the agent will now select a relevant topic and then launch one or more actions included within that topic. This enhancement will significantly improve the agent’s decision-making process, making it more accurate and generating more relevant, predictable responses. To learn how to build topics to group your actions, check out the documentation.

Advanced Planner

With the introduction of topics, we’ve enhanced the planner service in Einstein Copilot and Agentforce Agents. Rather than generating a single plan based on a user request, the new advanced planner now empowers your copilots and agents to make more frequent, iterative decisions that continuously adapt to user input. This reactive and dynamic approach not only increases the frequency of decision-making, but it also significantly enhances the accuracy of responses, instilling greater confidence in the copilot’s or agent’s ability to guide you effectively.

Models API (Beta)

The Models API (Beta) provides Apex classes and REST endpoints that connect your application to large language models (LLMs) from Salesforce partners, including Anthropic, Google, and OpenAI. These APIs became available in July.

To learn more about working with the Models API, watch our video and explore these APIs using the Salesforce Postman Collection. In the upcoming Winter release, we plan (safe harbor) to bring this to GA.

Platform development tools

Einstein for Developers (Beta) updates

Introducing our all-new Dev Assistant (Beta), part of Einstein for Developers (Beta)! With Dev Assistant (Beta), you can now ask Einstein to explain the code, provide instructions for Apex and LWC code suggestions, explain and document code, and request suggestions for code fixes. We are also using Retrieval Augmented Generation (RAG) to give you a response that is contextualized with your org’s metadata. You can learn more about the new Dev Assistant at Dreamforce 2024.

Salesforce CLI updates

The Salesforce CLI receives updates every week. Check the Salesforce CLI release notes weekly for helpful updates. Recent major improvements include:

  • You can now export up to five levels of child objects in a query when using data export tree --plan.
  • The data import tree --plan command can now handle files that contain more than 200 records.
  • When you run data import tree with the --file flag, the command uses parallel uploads, which improves performance.
  • There is a new command for uploading files. Here is an example command that shows how to upload a file and relate to a parent object via the CLI sf data create file --file astro.png --title Astro.png --parent-id a03fakePIA3.
  • We have made Salesforce CLI installation faster.
  • There is also a new beta command api request rest to send REST calls to your org.

Salesforce Code Analyzer

The Code Analyzer VS Code extension is now generally available and bundled with the Salesforce Extension Pack (expanded). Code Analyzer scans your code using multiple rules engines to produce lists of violations that you can use to improve your code. You can use Code Analyzer with the Salesforce CLI as well.

APIs and integrations

  • You can now process platform events in parallel in Apex triggers. The documentation explains how this works, how to implement this in Apex, and how to configure the partition settings.
  • Remember to update the instanced URLs in your API calls to your My Domain login URL before October 12, 2024.
  • We have improved speed for Metadata API deployment cancellations.
  • There is a new service protection enforced for metadata API deployments done via Apex. Note that this is enforced only for deployments queued via Apex and not via APIs.
  • BULK API 2.0 query results can now be downloaded in parallel. There is a limit of five parallel downloads.
  • UI APIs for Tasks and Events objects, along with some other objects like Profiles, are planned to be released in the October time frame.

More Winter ’25 learning resources

About the authors

Mohith Shrivastava is a principal Developer Advocate at Salesforce with a decade 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.

Kaitlin Benz is a Developer Marketing Communications Lead at Salesforce. She’s most passionate about storytelling, podcasts, and vegan food. Find her on LinkedIn.

Get the latest Salesforce Developer blog posts and podcast episodes via Slack or RSS.

Add to Slack Subscribe to RSS