{"id":192806,"date":"2019-11-20T10:20:00","date_gmt":"2019-11-20T17:20:00","guid":{"rendered":"http:\/\/developer.salesforce.com\/blogs\/?p=192806"},"modified":"2025-11-05T02:21:20","modified_gmt":"2025-11-05T09:21:20","slug":"introducing-salesforce-evergreen","status":"publish","type":"post","link":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen","title":{"rendered":"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>\n\t\t\t  <span class=\"postimagessection_specify aligncenter\" >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191119110921\/evergreen-blog-image-gradient-e1574186986199.png\" class=\"postimages\" width=\"600\" height=\"304\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\tDelightful and cohesive digital experiences make for happy customers, partners and employees, and building those modern experiences requires direct and seamless access to Customer 360 data and business logic. That\u2019s why we\u2019re excited to announce Salesforce Evergreen \u2014 a new addition to the Customer 360 Platform that brings in serverless functions based on fully-managed Kubernetes, support for open programming languages and commonly used high-performance data stores. Evergreen is the best way to build the deep and engaging digital experiences that your customers have come to expect.<\/p>\n<p>Evergreen supports technologies and architectural patterns that make development teams productive and happy:<\/p>\n<ul>\n<li><b>Functions-as-a-Service<\/b> for writing business logic and event processing in languages like Node.js, Java and Apex, using the full power of those languages\u2019 package ecosystems. Functions can be triggered directly from Apex or using Platform Events, with many more invocation types and event sources to come.<\/li>\n<li><b>Microservices<\/b> for building serverless HTTP apps and APIs that can be quickly evolved by small agile teams and composed into complex, engaging digital experiences. Services and functions are serverless, consume no resources when idle and automatically and elastically scale with traffic.<\/li>\n<li><b>Managed data stores<\/b> like Postgres, Apache Kafka and Redis that complement the Salesforce Data APIs for high-performance persistence and real-time eventing.<\/li>\n<\/ul>\n<p>As an industry first, these features come with built-in customer context, driven by the Salesforce data model and low-code components. Evergreen is a seamless part of the Salesforce platform and no extra authentication or networking setup is required. For example, developers can invoke functions directly from Apex, run logic with org-context and query and write-back updates.<\/p>\n<p>\n\t\t\t  <span class=\"postimagessection_specify aligncenter\" >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191121175241\/02-v11-1.png\" class=\"postimages\" width=\"2400\" height=\"1620\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>&nbsp;<\/p>\n<p>Evergreen is based on Kubernetes and balances control and access to scalable container technology by providing a fully managed serverless service operated by Salesforce. This service lets you focus more on innovation rather than infrastructure operations. Evergreen opens Salesforce development to any development team because apps, functions and services can be built using common open languages, tools and technologies.<\/p>\n<p>At the Dreamforce 2019 <a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJ9vQAG\">Developer Keynote<\/a>, we showcased how Salesforce customers like Caesars Entertainment can build a modern guest check-in experience using Evergreen. In the keynote demo, the Lightning Platform is used to quickly create an employee-facing iOS app for managing housekeeping and room-readiness and that is seamlessly extended with event-driven functions running on Evergreen. When housekeeping marks a room as ready using the employee app, a platform event triggers a Node.js function that uses guest-context to send a tailored real-time notification letting the guest know that the room is ready for early check-in.<\/p>\n<p>At the end of the stay, the Salesforce Flow powering the guest checkout can call out to a different function with invoicing details. The Node.js function can use the invoice details and an npm PDF module to quickly generate a bill. Here\u2019s the sample function that receives the request as a <a href=\"https:\/\/cloudevents.io\/\">CloudEvent<\/a> fetches additional data, generates a PDF and adds a link to the PDF from the guest booking record:<\/p>\n<pre>import { UnitOfWork, SObject } from '@salesforce\/functions';\r\nimport { PDFDocument } from 'pdfkit';\r\nimport * as fs from 'fs';\r\n\r\nmodule.exports = async function(event, context, logger) {\r\n    const folioPayload = event.payload;\r\n\r\n    \/\/ Creating a new Unit Of Work instance\r\n    const uow = UnitOfWork;\r\n\r\n    \/\/ Run SOQL query to fetch folio data\r\n    const query = `SELECT Id, Description__c, Amount__c, Date__c FROM Booking_LineItems__c WHERE Reservation__c = \r\n    '${folioPayload.recordId}'`;\r\n    const folioLineItems = await context.sfApi.query(query);\r\n\r\n    \/\/ Call function to generate PDF and store in external data store\r\n    \/\/ for Files Connect\r\n    const pdfFilesConnect = await generatePdf(\r\n        folioPayload.recordId,\r\n        folioLineItems\r\n    );\r\n\r\n    \/\/ Update the booking object\r\n    const ReservationObject = new SObject('Reservation__c');\r\n    ReservationObject.Id = folioPayload.recordId;\r\n    ReservationObject.Status__c = 'Paid and Folio created';\r\n    uow.registerModified(ReservationObject);\r\n\r\n    \/\/ Update data\r\n    uow.commit();\r\n};\r\n\r\nasync function generatePdf(id, lineItems) {\r\n    # generate and store folio PDF\r\n}<\/pre>\n<p>Functions running on Evergreen idle when not in use and automatically scale to handle any invocation load or event throughput. Functions are easy to build from source with <a href=\"https:\/\/engineering.salesforce.com\/standardizing-heroku-buildpacks-with-cncf-a43525f6c441\">Cloud Native Buildpacks<\/a> and developers are free to use any supported programming language and to pull in any package or library that\u2019s going to help them get their job done.<\/p>\n<p>Evergreen is the latest addition to the Salesforce Platform, combining Heroku\u2019s decade-long experience building scalable container runtimes and high-performance data stores with Lightning tools and features. The unique combination of serverless, elastic container technology and seamless access to customer data and low-code business logic makes Salesforce the obvious place to build and run the differentiated digital experiences that impress your customers, partners and employees.<\/p>\n<p>A limited access developer preview of Evergreen will be available with the Spring \u201920 release in February. <a href=\"https:\/\/www.salesforce.com\/form\/signup\/salesforce-evergreen\/\">Sign up to get Evergreen updates<\/a>. You can also watch the <a href=\"https:\/\/www.salesforce.com\/video\/7490459\">Dreamforce Developer Keynote recording<\/a> to see an Evergreen demo. If you\u2019re joining us on-site at #DF19, drop by the Dreamforce Evergreen booth at Platform Park in the Trailhead area (At Moscone West) to learn more, or join us for these Evergreen-focused Dreamforce breakout sessions:<\/p>\n<ul>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJOtQAO\">Build More on the Salesforce Platform with Evergreen Functions: An Elastic Runtime for Node.js<\/a> &#8211; Wed, Nov 20, (2:30-2:50pm), Moscone West (Surfside Theater)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJLoQAO\">Salesforce Evergreen and Evergreen Functions: Build evented serverless consumer apps<\/a> &#8211; Thurs, Nov 21 (3-3:40pm), Moscone West (Room 2007)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJXBQA4\">Evented enterprise app architectures with Salesforce Evergreen and Evergreen Functions<\/a> &#8211; Thurs, Nov 21 (5-5:40pm), Moscone West (Room 2024)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJO9QAO\">Salesforce Evergreen and Evergreen Functions: Build evented serverless consumer apps<\/a> &#8211; Fri, Nov 22, (12-12:40pm), Moscone West (Surfside Theater)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Delightful and cohesive digital experiences make for happy customers, partners and employees, and building those modern experiences requires direct and seamless access to Customer 360 data and business logic. That\u2019s why we\u2019re excited to announce Salesforce Evergreen \u2014 a new addition to the Customer 360 Platform that brings in serverless functions based on fully-managed [&hellip;]<\/p>\n","protected":false},"author":3537,"featured_media":192838,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2489,2530],"tags":[2674,2662,2288,2655,2661,2663],"coauthors":[],"class_list":["post-192806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-announcements","category-data-cloud","tag-customer-360-platform","tag-functions","tag-microservices","tag-november-2019","tag-salesforce-evergreen","tag-serverless"],"podcast_audio":{"audio_url":"","duration":""},"featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png?w=200","related_posts":[{"post":{"ID":203077,"post_author":"3557","post_date":"2024-09-03 09:30:24","post_date_gmt":"2024-09-03 15:30:24","post_content":"The <a href=\"https:\/\/admin.salesforce.com\/blog\/2024\/admin-winter-25-release-dates-countdown\">Winter \u201925 release<\/a> starts rolling out to your sandbox and production environments from September through October 2024. Get ready \u2014 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.\r\n\r\nLet\u2019s take a look at the highlights for developers.\r\n<h2>Apex enhancements<\/h2>\r\n<h3>Preventing collection modification during iteration in Apex<\/h3>\r\nIn Apex, modifying a set while iterating over it used to be allowed before API version 61.0 (Summer \u201924). 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 \u201c<b>System.FinalException: Cannot modify a collection while it is being iterated\u201d<\/b><b> <\/b>exception. This change ensures more reliable and consistent code execution.\r\n<pre language=\"apex\"> Set&lt;String&gt; names = new Set&lt;String&gt;{'Alice', 'Bob', 'Charlie'}; \r\n for (String name : names) { \u00a0 \r\n  if (name.startsWith('A')) {\r\n    names.remove(name); \/\/ This throws a System.FinalException in API v62.0 \u00a0 \u00a0 \r\n  } \r\n}<\/pre>\r\n<h3>Improved error messages for invalid SOQL<\/h3>\r\n<span>We now provide much more user-friendly error messages for invalid dynamic SOQL and SOQL issued via APIs. Go through the <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_apex_soql.htm&amp;release=252&amp;type=5\">list of error message changes <\/a>and <span>be sure to update any code that depends on old SOQL error messages. <\/span>\r\n<h3>Support for negative currency values in dynamic SOQL<\/h3>\r\nWe 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.\r\n\r\nThe code snippet below now works if you have orgs with MultiCurrency enabled.\r\n<pre language=\"apex\">System.debug(Database.query(SELECT Amount FROM Opportunity WHERE Amount &lt; USD-5000));\r\n<\/pre>\r\n<h3>Track Apex Unexpected Exceptions with free-tier Event Monitoring<\/h3>\r\nWe 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 <a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/modules\/event_monitoring\">Event Monitoring<\/a> 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 <a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.object_reference.meta\/object_reference\/sforce_api_objects_eventlogfile_apexunexpectedexception.htm\">Apex Unexpected Exception event type<\/a>.\r\n\r\nYou 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.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/09\/Screenshot-2024-08-21-at-1.13.14\u202fPM-2000x804.png\" alt=\"Image showing how to download event logs via the Event Log file browser\" width=\"918\" height=\"369\" class=\"alignnone wp-image-203082\" \/>\r\n\r\nAdditionally, we now ensure that exceptions triggered by transactions with entry points, such as <code>@AuraEnabled<\/code>, <code>@RestResource<\/code>, and <code>@InvocableAction<\/code> annotations are captured in the Apex Unexpected Exception event type.\r\n<h3>Mock SOQL tests for external objects<\/h3>\r\n<span>You can mock SOQL query responses for external objects in Apex testing using SOQL stub methods and a new test class. Look at the <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.252.0.apexcode.meta\/apexcode\/apex_connector_external_objects_mock_soql_tests.htm\">example code<\/a><span> to learn how to extend the new <code>system.SoqlStubProvider<\/code> class and override the <code>handleSoqlQuery()<\/code> class method. <\/span>\r\n<h2>LWC enhancements<\/h2>\r\n<h3>Develop LWC faster with Local Dev (Beta)<\/h3>\r\nLocal Dev (Beta) is now available in Winter \u201925 sandboxes and scratch orgs for now. It allows you to preview your LWC instantly as you code \u2014 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 <a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/get-started-test-components.html\">documentation<\/a>.\r\n<h3>LWC API version 62.0 updates<\/h3>\r\nWith API version 62.0, we are bringing much-needed enhancements to LWC. You will need to update a component's API version in its <code>.js-meta.xml<\/code> file to update the component version. Note that the features below work only if your LWC component version is 62.0 or above.\r\n<h3>Class object bindings for managing styles<\/h3>\r\n<span>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.<\/span>\r\n\r\nHere is an example code showing c<span>lass object bindings <\/span>in action. Let\u2019s say you have a button component with the HTML markup below:\r\n<pre language=\"HTML\">&lt;div class={computedClassNames}&gt;Evaluate some classes here&lt;\/div&gt;\r\n<\/pre>\r\nAnd below is a JavaScript class that returns the <code>computedClassNames<\/code> as arrays with object types.\r\n<pre language=\"javascript\">import { LightningElement } from \"lwc\";\r\n\r\nexport default class extends LightningElement {\r\n  position = \"left\";\r\n  fullWidth = true;\r\n  hidden = false;\r\n\r\n  get computedClassNames() {\r\n    return [\r\n      \"div__block\",\r\n      this.position &amp;&amp; `div_${this.position}`,\r\n      {\r\n        \"div_full-width\": this.fullWidth,\r\n        hidden: this.hidden,\r\n      },\r\n    ];\r\n  }\r\n}\r\n<\/pre>\r\nThe above code would render the HTML as below with 62.0 and beyond.\r\n<pre language=\"HTML\">&lt;div class='div__block div_left div_full-width'&gt;\r\n   Evaluate some classes here\r\n&lt;\/div&gt;\r\n<\/pre>\r\nIn version 61.0, this would render as below:\r\n<pre language=\"HTML\">&lt;div class='div__icon,div_left,[object Object]'&gt;\r\n   Evaluate some classes here\r\n&lt;\/div&gt;\r\n<\/pre>\r\n<span>The docs provide a <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/create-components-class-binding.html\">handy table<\/a> showing how<span> class bindings render in API version 62.0 and beyond vs. 61.0 with different data types.<\/span>\r\n<h3>New<span> <\/span><code>this.style<\/code><span> <\/span>property<\/h3>\r\nStarting with version 62.0, you can access a component's host <code>CSSStyleDeclaration<\/code> (see <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/CSSStyleDeclaration\">docs<\/a>) directly using <code>this.style<\/code>, regardless of whether you're using light DOM or shadow DOM. In earlier versions (61.0 and before), you had to use <code>this.children[0].parentElement.style<\/code> for light DOM and <code>this.template.host.style<\/code> for shadow DOM. With 62.0, <code>this.style<\/code> simplifies this process. Here's an example component showing how to set the style using this new property.\r\n<pre language=\"javascript\">import { LightningElement } from \"lwc\";\r\n\r\nexport default class extends LightningElement {\r\n  static renderMode = \"light\"; \/\/ default is 'shadow'\r\n\r\n  setStyle() {\r\n    this.style.setProperty('color', 'red');\r\n    this.style.setProperty('border', '1px solid eee');\r\n    console.log(this.style.color); \/\/ logs \"red\"\r\n  }\r\n  \r\n  renderedCallback() {\r\n     this.style.color = 'red';\r\n  }\r\n}\r\n<\/pre>\r\n<h3>New<span> <\/span><code>this.hostElement<\/code><span> <\/span>property<\/h3>\r\n<span>In LWC API version 62.0 and later, you can access the parent element using <\/span><code><span>this.hostElement<\/span><\/code><span> in a <\/span><code><span>renderedCallback<\/span><\/code><span> or in another callback. This is a convenient syntax for<\/span><span> <\/span><span><code>this.template.host<\/code> in shadow DOM that now works with light DOM too. Here is an example showing the usage of <code>this.hostElement<\/code>:<\/span>\r\n<pre language=\"javascript\">\/\/ c-light\r\nimport { LightningElement } from \"lwc\";\r\n\r\nexport default class extends LightningElement {\r\n  static renderMode = \"light\"; \/\/ default is 'shadow'\r\n\r\n  renderedCallback() {\r\n    console.log(this.hostElement); \/\/ logs \r\n    console.log(this.hostElement.tagName); \/\/ logs C-LIGHT\r\n  }\r\n}\r\n<\/pre>\r\n<h3>Upgrade your ESLint dependencies to prevent deployment-time issues<\/h3>\r\n<span>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.<\/span>\r\n<pre language=\"javascript\">\/\/ Don\u2019t do this\r\nimport 'lwc';\r\nexport * as lwc from 'lwc';\r\nexport {} from 'lwc';\r\nexport { privateFunction } from 'lwc';\r\n<\/pre>\r\n<h3>GraphQL wire adapter is now supported in Experience Cloud sites<\/h3>\r\nThe GraphQL wire adapter <code>lightning\/uiGraphQLApi<\/code> is also now supported in LWCs built for Experience Cloud LWR sites. Check out <a href=\"https:\/\/github.com\/trailheadapps\/lwc-recipes\/tree\/main\/force-app\/main\/default\/lwc\">LWC Recipes<\/a> to learn how to build with <code>lightning\/uiGraphQLApi<\/code>.\r\n<h3>Manage list views with new Lightning Web Component (LWC) wire adapters<\/h3>\r\nList 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 <code>lightning\/uiListsApi<\/code> (see <a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/reference-lightning-ui-api-lists-ui.html\">docs<\/a>). 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 <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_customization_list_views_wire_adapters.htm&amp;release=252&amp;type=5\">release notes<\/a>.\r\n<h3>Support for Event objects in form base components<\/h3>\r\n<code><span>lightning-record-form<\/span><\/code><b><span>, <\/span><\/b><span><code>lightning-record-edit-form<\/code>,<\/span><b><span> <\/span><\/b><span>and<b> <\/b><code>lightning-record-view-form<\/code><b> <\/b>LWC base components now support Event objects. You can read more in the <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_lwc_modules.htm&amp;release=252&amp;type=5\">docs<\/a><span>.<\/span>\r\n<h3>Other miscellaneous updates<\/h3>\r\n<ul>\r\n \t<li><span>We now allow components with larger JavaScript files. The previous limit was 128KB, and we now support up to 1MB for JavaScript bundles.<\/span><\/li>\r\n \t<li>We <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_lc_base_component_accessibility.htm&amp;release=252&amp;type=5\">improved accessibility for base components<\/a> like <code>lightning-input<\/code>.<\/li>\r\n \t<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_lc_lws_enablement_status.htm&amp;release=252&amp;type=5\">Lightning Web Security auto enablement<\/a> is postponed for now as we heard customers need more time.<\/li>\r\n \t<li><span>Enabling and disabling LWS distortions can give you further insights into your component. Read the <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/security-lwsec-debug-distortion-flags.html\">docs<\/a><span> to learn how to use your browser console to do this. Additionally, <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_lc_lws_distortion_changes.htm&amp;release=252&amp;type=5\">new distortions<\/a><span> are added with the Winter \u201925 release.<\/span><\/li>\r\n \t<li>In Winter \u201925, additional components were adapted to prepare for <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_lc_native_shadow_dom_252.htm&amp;release=252&amp;type=5\">native shadow DOM<\/a>. 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.<\/li>\r\n<\/ul>\r\n<h3>TypeScript support for LWC (Developer Preview)<\/h3>\r\nAre you a <a href=\"https:\/\/www.typescriptlang.org\/\">TypeScript<\/a><span> lover? Starting in Winter \u201925, you can author your LWC components using TypeScript. Instead of JavaScript, you\u2019ll 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.<\/span>\r\n<pre language=\"javascript\">import { LightningElement, track } from 'lwc';\r\n\r\nexport default class DynamicButton extends LightningElement {\r\n    @track variant: string = 'primary';\r\n    @track position: string = 'right';\r\n    @track fullWidth: boolean = false;\r\n    @track disabled: boolean = false;\r\n    @track showTooltip: boolean = false;\r\n    @track icon: string = 'utility:check';\r\n\r\n    get computedClassNames(): (string | { [key: string]: boolean })[] {\r\n        return [\r\n            'button',\r\n            `button_${this.variant}`,\r\n            `button_${this.position}`,\r\n            {\r\n                'button_full-width': this.fullWidth,\r\n                'button_disabled': this.disabled,\r\n                'button_with-icon': Boolean(this.icon),\r\n            }\r\n        ];\r\n    }\r\n\r\n    get tooltipClass(): string {\r\n        return this.showTooltip ? 'tooltip tooltip_visible' : 'tooltip';\r\n    }\r\n\r\n    handleToggle(): void {\r\n        this.variant = this.variant === 'primary' ? 'secondary' : 'primary';\r\n        this.icon = this.icon === 'utility:check' ? 'utility:close' : 'utility:check';\r\n    }\r\n\r\n    handleMouseEnter(): void {\r\n        this.showTooltip = true;\r\n    }\r\n\r\n    handleMouseLeave(): void {\r\n        this.showTooltip = false;\r\n    }\r\n}\r\n<\/pre>\r\n<span>This feature is in Developer Preview, and we want to hear your feedback via the <\/span><a href=\"https:\/\/trailhead.salesforce.com\/trailblazer-community\/groups\/0F93A000000LnxwSAC?tab=discussion&amp;sort=LAST_MODIFIED_DATE_DESC\">Trailblazer Community<\/a><span>. Check out the <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/ts.html\">docs<\/a><span> and let us know about your experience as we bring these features to production.<\/span>\r\n<h2>Data Cloud release highlights<\/h2>\r\n<h3>Data Cloud sandboxes (Beta)<\/h3>\r\nData Cloud sandboxes are now available in Beta. The <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.c360_a_data_cloud_sandbox.htm&amp;type=5\">docs<\/a> explain which features of Data Cloud these sandboxes support.\r\n<h3>Vector search and hybrid search in Data Cloud<\/h3>\r\nYou 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.\r\n\r\n<span>You can run vector search queries using <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.c360_a_search_index_query.htm&amp;type=5\">Query API<\/a><span>. This feature was released as a part of the August 2024 release. Below is an example query for all similar cases with the subject \u201cline power failure\u201d from unstructured case comments vectorized and indexed in Data Cloud.<\/span>\r\n<pre language=\"apex\">SELECT\r\n    v.score__c, c.SourceRecordId__c\r\nFROM \r\n    vector_search(table(CaseComments_index__dlm), 'power failure', '', 10) v\r\n    JOIN CaseComments_chunk__dlm c ON v.RecordId__c = c.RecordId__c\r\n    JOIN CaseComments__dlm casecomment on c.SourceRecordId__c = casecomment.Id__c\r\nORDER BY 1 DESC\r\n<\/pre>\r\n<h3>Retrieval Augmented Generation (RAG) in Data Cloud<\/h3>\r\n<a href=\"https:\/\/www.salesforce.com\/news\/stories\/retrieval-augmented-generation-explained\/\">Retrieval Augmented Generation (RAG)<\/a><span> 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.<\/span>\r\n\r\n<span>We also provide capabilities to <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.c360_a_ai_retriever.htm&amp;type=5\">manage retrievers<\/a><span> now. A retriever returns relevant facts from textual data \u2014 which is indexed in the vector database \u2014 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 <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.generative_ai_rag.htm&amp;type=5\">documentation<\/a><span>. <\/span>\r\n<h3>Lock and protect your custom metadata in a data kit<\/h3>\r\nData 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.\r\n<h3>Establish dependency between Data Cloud packages and Salesforce Platform packages<\/h3>\r\nWhile 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.\r\n<h3>Cross-cloud Data Cloud updates<\/h3>\r\n<span>A number of cross-cloud updates are coming in the Winter '25 release. Refer to the <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_cross_cloud_data_cloud_features.htm&amp;release=252&amp;type=5\">release notes<\/a><span> to explore these features like support for <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_experiences_data_cloud.htm&amp;release=252&amp;type=5\">more events capture from Experience cloud sites to Data Cloud integration<\/a><span> and support for<\/span> <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_knowledge_data_cloud.htm&amp;release=252&amp;type=5\">unified knowledge<\/a><span> in Data Cloud for service cloud use cases. These features become available as part of the September release.<\/span>\r\n<h2>Agentforce features<\/h2>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\">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.<\/span>\r\n<h3>Agentforce Agents<\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\"><a href=\"https:\/\/www.salesforce.com\/blog\/ai-software-development\/\">Agentforce Agents<\/a><span> 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: <\/span><a href=\"https:\/\/www.salesforce.com\/einsteincopilot\">Einstein Copilots<\/a><span> <\/span><span>(an assistive type of agent, already available since Spring \u201924),<\/span><span> which assist humans collaboratively, and fully autonomous Agentforce A<\/span><span>gents<\/span><span> (available in Winter \u201925 ) that work independently with safety measures in place and can hand off a task to humans when needed.<\/span><\/span>\r\n\r\n<span>In Winter \u201925, 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).<\/span>\r\n<h3><b><span>Agent Builder updates<\/span><\/b><\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\"><span>Copilot Builder is now Agent Builder. With Agent Builder, you can customize out-of-the-box<\/span><span> <\/span><span>Agentforce A<\/span><span>gents<\/span><span> 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\u2019s responses and plan of action. We will have more enablement sessions and content for you at <\/span><a href=\"https:\/\/www.salesforce.com\/dreamforce\/\">Dreamforce<\/a><span>.<\/span>\r\n<\/span>\r\n<h3>Introducing topics in Agent Builder<\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\">Building copilots and agents is about to become even more efficient with the introduction of <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_einstein_copilot_topics.htm&amp;release=252&amp;type=5\">topics<\/a>. 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\u2019s 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 <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.copilot_topics.htm&amp;type=5\">documentation<\/a>.\r\n<\/span>\r\n<h3>Advanced Planner<\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\">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.\r\n<\/span>\r\n<h3>Models API (Beta)<\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\"><span>The <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/einstein\/genai\/guide\/models-api.html\">Models API (Beta) <\/a><span>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. <\/span><\/span>\r\n\r\nTo learn more about working with the Models API, <a href=\"https:\/\/www.youtube.com\/watch?v=hf95_ghGeNI\">watch our video <\/a>and explore these APIs using the Salesforce <a href=\"https:\/\/www.postman.com\/salesforce-developers\/salesforce-developers\/collection\/onih7sc\/models-apis-beta\">Postman Collection<\/a>. In the upcoming Winter release, we plan (safe harbor) to bring this to GA.\r\n<h2>Platform development tools<\/h2>\r\n<h3>Einstein for Developers (Beta) updates<\/h3>\r\n<span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\">Introducing our all-new <a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/einstein-for-devs\/guide\/einstein-devassistant.html\">Dev Assistant (Beta<\/a>), 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\u2019s metadata. You can learn more about the new Dev Assistant at <a href=\"http:\/\/salesforce.com\/dreamforce\/?&amp;utm_source=developer&amp;utm_medium=blog-link&amp;utm_campaign=devblog_launch&amp;d=7013y000002q7asAAA\">Dreamforce 2024<\/a>. <\/span>\r\n<h3><span style=\"color: #333333;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif\">Salesforce CLI updates<\/span><\/h3>\r\n<span>The Salesforce CLI receives updates every week. Check the Salesforce CLI <\/span><a href=\"https:\/\/github.com\/forcedotcom\/cli\/blob\/main\/releasenotes\/README.md\">release notes<\/a><span> weekly for helpful updates. Recent major improvements include:<\/span>\r\n<ul>\r\n \t<li>You can now export up to five levels of child objects in a query when using<span> <\/span><code>data export tree --plan<\/code>.<\/li>\r\n \t<li>The<span> <\/span><code>data import tree --plan<\/code><span> <\/span>command can now handle files that contain more than 200 records.<\/li>\r\n \t<li>When you run<span> <\/span><code>data import tree<\/code><span> <\/span>with the<span> <\/span><code>--file<\/code><span> <\/span>flag, the command uses parallel uploads, which improves performance.<\/li>\r\n \t<li><span>There is a new command for uploading files<\/span>. Here is an example command that shows how to upload a file and relate to a parent object via the CLI <code>sf data create file --file astro.png --title Astro.png --parent-id a03fakePIA3<\/code>.<\/li>\r\n \t<li><span>We have made Salesforce CLI installation faster.<\/span><\/li>\r\n \t<li>There is also a new b<span>eta <\/span>command<span> <\/span><code>api request rest<\/code><span> to send REST calls to your org.<\/span><\/li>\r\n<\/ul>\r\n<h3>Salesforce Code Analyzer<\/h3>\r\nThe Code Analyzer VS Code extension is now generally available and bundled with the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=salesforce.salesforcedx-vscode-expanded\">Salesforce Extension Pack (expanded<\/a>). Code Analyzer<span> 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.<\/span>\r\n<h2>APIs and integrations<\/h2>\r\n<ul>\r\n \t<li><span>You can now process platform events in parallel in Apex triggers. The <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.252.0.platform_events.meta\/platform_events\/platform_events_ps.htm\">documentation<\/a><span> explains how this works, how to implement this in Apex, and how to configure the partition settings.<\/span><\/li>\r\n \t<li><span>Remember to update the<\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_api_use_my_domain.htm&amp;release=252&amp;type=5\"> instanced URLs<\/a><span> in your API calls to your My Domain login URL before October 12, 2024. <\/span><\/li>\r\n \t<li>We have <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.deploy_cancel_responsiveness.htm&amp;release=252&amp;type=5\">improved speed<\/a> for Metadata API deployment cancellations.<\/li>\r\n \t<li><span>There is a <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.apex_metadata_deployments.htm&amp;release=252&amp;type=5\">new service protection<\/a><span> enforced for metadata API deployments done via Apex. Note that this is enforced only for deployments queued via Apex and not via APIs. <\/span><\/li>\r\n \t<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_api_bulk_2.htm&amp;release=252&amp;type=5\">BULK API 2.0 query results<\/a> can now be downloaded in parallel. There is a limit of five parallel downloads.<\/li>\r\n \t<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.rn_api_ui.htm&amp;release=252&amp;type=5\">UI APIs<\/a> for Tasks and Events objects, along with some other objects like Profiles, are planned to be released in the October time frame.<\/li>\r\n<\/ul>\r\n<h2>More Winter \u201925 learning resources<\/h2>\r\n<ul>\r\n \t<li>Listen to the <a href=\"https:\/\/developer.salesforce.com\/podcast\/2024\/09\/episode-226-winter-25-release-highlights-with-mohith-shrivastava\">Winter '25 Release Highlights<\/a> on the Salesforce Developers Podcast<\/li>\r\n \t<li>View the<span> <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=release-notes.salesforce_release_notes.htm&amp;release=252&amp;type=5\">official release notes<\/a><span> <\/span>or download the<span> <\/span><a href=\"https:\/\/resources.docs.salesforce.com\/252\/latest\/en-us\/sfdc\/pdf\/salesforce_winter25_release_notes.pdf\">PDF version<\/a><\/li>\r\n \t<li>Join the<span> <\/span><a href=\"https:\/\/trailhead.salesforce.com\/trailblazer-community\/groups\/0F93A000000DJbJSAW?tab=discussion&amp;sort=LAST_MODIFIED_DATE_DESC\">Salesforce Developers Trailblazer Community group<\/a><span> <\/span>to connect with the global developer community<\/li>\r\n \t<li>Join<span> <\/span><a href=\"https:\/\/trailhead.salesforce.com\/trailblazer-community\/groups\/0F9300000001okuCAA?tab=discussion&amp;sort=LAST_MODIFIED_DATE_DESC\">Release Readiness Trailblazers<\/a><span> <\/span>to<span> stay informed about the latest product enhancements and innovations across the Salesforce ecosystem<\/span><\/li>\r\n<\/ul>\r\n<h2>About the authors<\/h2>\r\n<b><span>Mohith Shrivastava<\/span><\/b><span> 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 <\/span><a href=\"https:\/\/www.linkedin.com\/in\/mohith-shrivastava-9a36464a\/\">LinkedIn<\/a>.\r\n\r\n<b><span>Kaitlin Benz<\/span><\/b><span> is a Developer Marketing Communications Lead at Salesforce. She\u2019s most passionate about storytelling, podcasts, and vegan food. Find her on <\/span><a href=\"https:\/\/www.linkedin.com\/in\/kaitlinbenz\/\">LinkedIn<\/a><span>.<\/span>","post_title":"The Salesforce Developer\u2019s Guide to the Winter \u201925 Release","post_excerpt":"The Winter '25 release is here! In this post, we highlight what\u2019s new for developers across the Salesforce ecosystem.","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"winter25-developers","to_ping":"","pinged":"","post_modified":"2025-11-05 02:12:46","post_modified_gmt":"2025-11-05 09:12:46","post_content_filtered":"","post_parent":0,"guid":"https:\/\/developer.salesforce.com\/blogs\/?p=203077","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw","featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20240830144825\/SF-DEVS-24-03_Winter25-BlogFeaturedImage_Final-1-1.png?w=1260","link":"https:\/\/developer.salesforce.com\/blogs\/2024\/09\/winter25-developers","podcast_audio":{"audio_url":"","duration":""},"authors":[{"name":"Mohith Shrivastava","image_src":"https:\/\/secure.gravatar.com\/avatar\/6e0b4ae22883cfc39cc1442233de807a7444e2d8c6b8bfe9895ff375c59950b9?s=24&d=mm&r=g"},{"name":"Kaitlin Benz","image_src":"https:\/\/secure.gravatar.com\/avatar\/6f7b4b730cf059e9c36e78e74c7622455d467842a7666ab1f946369621fe0726?s=24&d=mm&r=g"}]}},{"post":{"ID":203260,"post_author":"3647","post_date":"2024-10-14 09:00:20","post_date_gmt":"2024-10-14 15:00:20","post_content":"Multi-org users of Data Cloud have long awaited an easy way to access a unified Customer 360 and take action on their data across multiple orgs. Now the wait is over! Today we are happy to announce the GA of <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.c360_a_connect_salesforce_orgs.htm&amp;type=5\">Data Cloud One<\/a>. With Data Cloud One, multiple orgs are now equipped with a unified customer profile and Data Cloud-powered features through one central Data Cloud. Data Cloud One empowers multi-org teams, making it easy for them to get started with Data Cloud. Let\u2019s dive into how Data Cloud One will transform collaboration for your multi-org teams.\r\n<h2>A new way to access Data Cloud across orgs \u2014 with low code configuration<\/h2>\r\nWhat is Data Cloud One, you ask? Data Cloud One is a highly anticipated new feature that significantly enhances multi-org development with Data Cloud. It allows you to power an entire organization with a single, central Data Cloud serving as a true source of truth.\r\n\r\nHere are some key features of Data Cloud One:\r\n<ul>\r\n \t<li><b>Enhance the power of Data Cloud: <\/b>Easily equip multiple Salesforce orgs with a unified customer 360 through a central Data Cloud<\/li>\r\n \t<li><b>Implement Data Cloud faster: <\/b>Share your Data Cloud data to multiple Salesforce orgs using no-code point-and-click solutions<\/li>\r\n \t<li><b>Enable each org with Data Cloud-powered CRM: <\/b>Use Data Cloud-powered features across multiple Salesforce orgs with one central Data Cloud<\/li>\r\n<\/ul>\r\n<h2>What\u2019s different with Data Cloud One?<\/h2>\r\n[caption id=\"attachment_203354\" align=\"alignnone\" width=\"1226\"]<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-08-at-3.12.21\u202fPM.png\" alt=\"What's different with Data Cloud One\" width=\"1226\" height=\"576\" class=\"wp-image-203354 size-full\" \/> What's different with Data Cloud One[\/caption]\r\n\r\nData Cloud One is designed to unify the power of Data Cloud across your entire organization. Many companies have multiple Salesforce orgs for various reasons, such as the separation of business divisions or the acquisition of new businesses. For example, an organization with three separate divisions might have three distinct orgs, each with its own data, users, security settings, and customizations. Installing Data Cloud in each org is cumbersome and costly, and manually connecting the data across orgs has its limitations, such as restricted data sharing and limited access to Data Cloud-powered features. With Data Cloud One, you can now connect multiple orgs to a central Data Cloud home org via a companion connection, enabling each companion org with a Data Cloud One application. This allows multi-org enterprises to power their entire CRM + AI + Data + Trust journey with just one central Data Cloud via deeper metadata sharing across all orgs. Each companion org has an accessible view of Data Cloud data and the ability to take action on that data through AI, automation, and analytics.\r\n<h2>What does a typical use case look like?<\/h2>\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-08-at-3.14.36\u202fPM.png\" alt=\"What a typical use case looks like with and without Data Cloud One\" width=\"1614\" height=\"674\" class=\"alignnone wp-image-203356 size-full\" \/>\r\n\r\nImagine an organization with three orgs: one for retail banking, another for wealth management, and a third for insurance. Currently, Data Cloud is provisioned in the retail banking org. So, how does a Sales leader managing the insurance org easily access Data Cloud data to enrich their profiles within their own org?\r\n\r\nWithout Data Cloud One, they\u2019d need to go through a complex, time-consuming process. First, they\u2019d have to contact the admin of the retail banking org, create additional insights there, write custom Apex code using Named Credentials or custom actions, set up a connected app between the orgs, transfer the data, and then query it from the insurance org back to Data Cloud in retail banking. Even in the best-case scenario, this could take up to two weeks.\r\n\r\nNow, with Data Cloud One, the entire process is reduced to just minutes. Since metadata is shared across orgs, the Sales leader gains direct, native access to Data Cloud data in the retail banking org. They can create insights themselves or simply use CRM enrichments to enrich their CRM objects effortlessly.\r\n\r\nThe screenshot below shows a unified profile in a Data Cloud home org.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-05-at-2.30.03\u202fPM-1735x1000.png\" alt=\"A unified profile in a Data Cloud home org \" width=\"991\" height=\"571\" class=\"alignnone wp-image-203340\" \/>\r\n\r\nUsing Data Cloud One, the screenshot below shows the same unified profile in a Data Cloud companion org.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Companion-Connection-Profile-1737x1000.png\" alt=\"The same unified profile in a Data Cloud companion org\" width=\"988\" height=\"569\" class=\"alignnone wp-image-203341\" \/>\r\n<h2>This all sounds great, so how do I get my hands on it?<\/h2>\r\nData Cloud One can accessed through the Data Cloud companion connections screen in Data Cloud Setup. You immediately have access to three free companion connections allowing you to navigate to companion connections and connect to three other Salesforce orgs.\r\n\r\nBy doing a simple authentication, you can see the details of the companion connection and which data spaces have been shared with it. You have the power to decide what data can and cannot be shared with your companion orgs.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Connection-from-Home-Org-1714x1000.png\" alt=\"Data Cloud Setup screen showing how to access Data Cloud One\" width=\"989\" height=\"577\" class=\"alignnone wp-image-203342\" \/>\r\n\r\nHere in the companion org you can see the details of the companion connection that exists between the home org and the companion org. Now, every org has access to the home org data and can leverage core Salesforce features through flows, prompts, CRM enrichments, and more.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Data-Cloud-Setup-from-Companion-Org-1686x1000.png\" alt=\"Companion connection detail screen\" width=\"997\" height=\"591\" class=\"alignnone wp-image-203343\" \/>\r\n<h2>Conclusion<\/h2>\r\nWith the GA of Data Cloud One Salesforce is revolutionizing multi-org strategy with Data Cloud. We are excited to see developers and teams become even more productive in their daily work. Get started with Data Cloud One today, and share your feedback by joining the <a href=\"https:\/\/trailhead.salesforce.com\/trailblazer-community\/groups\/0F94V000000DYhhSAG?tab=discussion&amp;sort=LAST_MODIFIED_DATE_DESC\">Datablazer Community<\/a>!\r\n<h2>Frequently Asked Questions<\/h2>\r\n<h4>What is a Data Cloud home org?<\/h4>\r\nThe Data Cloud home org is the central hub where all your data is ingested and stored, serving as the single source of truth for your unified Customer 360 view and housing your data lake.\r\n<h4>What is a data space?<\/h4>\r\nA data space is a logical partition within Data Cloud to organize your data for profile unification, insights, and marketing efforts. You can select which data spaces you choose to share to your companion orgs. Only the metadata for these objects is shared across connected orgs.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-04-at-11.58.17\u202fAM.png\" alt=\"What is a Data Space\" width=\"998\" height=\"533\" class=\"alignnone wp-image-203344\" \/>\r\n<h4>What is a companion org?<\/h4>\r\nA companion org is connected to the home org via the companion connection, allowing it to access shared metadata and collaborate effortlessly across Data Cloud. Data Cloud dependent features work seamlessly as they are powered via the Data Cloud home org.\r\n<h4>What is a companion connection?<\/h4>\r\nA companion connection is a bridge that links companion orgs to the home org, enabling seamless metadata sharing for the data spaces you choose to share.\r\n<h4>Is Data Cloud One included within the existing Data Cloud SKU?<\/h4>\r\nYes, Data Cloud One is included within the existing Data Cloud SKU. Any usage drawn from companion orgs will consume credits directly from the home org.\r\n<h4>How many companion connections are included with Data Cloud One?<\/h4>\r\nThree free companion connections to other Salesforce Orgs are included. The option to buy additional companion connections is available via add-on licenses.\r\n<h2>Resources<\/h2>\r\n<ul>\r\n \t<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.c360_a_connect_salesforce_orgs.htm&amp;type=5\">Data Cloud One documentation<\/a><\/li>\r\n \t<li>Trailhead module: <a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/modules\/data-cloud-one-quick-look\">Data Cloud One: Quick Look<\/a><\/li>\r\n<\/ul>\r\nThank you to Kunal Goyal, Product Management Director, for his collaboration on this article.\r\n<h2>About the author<\/h2>\r\n<b>Tara Venkatesan<\/b> is a Product Marketing Manager for Salesforce Data Cloud. She focuses on platform integrations, segmentation, and activation.","post_title":"Data Cloud One Is Now Generally Available","post_excerpt":"Let\u2019s dive into how Data Cloud One will transform collaboration for your multi-org teams.","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"data-cloud-one-is-now-generally-available","to_ping":"","pinged":"","post_modified":"2025-11-05 02:12:38","post_modified_gmt":"2025-11-05 09:12:38","post_content_filtered":"","post_parent":0,"guid":"https:\/\/developer.salesforce.com\/blogs\/?p=203260","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw","featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20241007095139\/Codey-V2-3.png?w=1200","link":"https:\/\/developer.salesforce.com\/blogs\/2024\/10\/data-cloud-one-is-now-generally-available","podcast_audio":{"audio_url":"","duration":""},"authors":[{"name":"Tara Venkatesan","image_src":"https:\/\/secure.gravatar.com\/avatar\/61cdaf10ee9a1bf870e81bc7b07addd2bea22f73a6366f79cb841339db5d7797?s=24&d=mm&r=g"}]}}],"unstyled_content":"\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191119110921\/evergreen-blog-image-gradient-e1574186986199.png\" width=\"600\" height=\"304\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\tDelightful and cohesive digital experiences make for happy customers, partners and employees, and building those modern experiences requires direct and seamless access to Customer 360 data and business logic. That\u2019s why we\u2019re excited to announce Salesforce Evergreen \u2014 a new addition to the Customer 360 Platform that brings in serverless functions based on fully-managed Kubernetes, support for open programming languages and commonly used high-performance data stores. Evergreen is the best way to build the deep and engaging digital experiences that your customers have come to expect.<\/p>\n<p>Evergreen supports technologies and architectural patterns that make development teams productive and happy:<\/p>\n<ul>\n<li><b>Functions-as-a-Service<\/b> for writing business logic and event processing in languages like Node.js, Java and Apex, using the full power of those languages\u2019 package ecosystems. Functions can be triggered directly from Apex or using Platform Events, with many more invocation types and event sources to come.<\/li>\n<li><b>Microservices<\/b> for building serverless HTTP apps and APIs that can be quickly evolved by small agile teams and composed into complex, engaging digital experiences. Services and functions are serverless, consume no resources when idle and automatically and elastically scale with traffic.<\/li>\n<li><b>Managed data stores<\/b> like Postgres, Apache Kafka and Redis that complement the Salesforce Data APIs for high-performance persistence and real-time eventing.<\/li>\n<\/ul>\n<p>As an industry first, these features come with built-in customer context, driven by the Salesforce data model and low-code components. Evergreen is a seamless part of the Salesforce platform and no extra authentication or networking setup is required. For example, developers can invoke functions directly from Apex, run logic with org-context and query and write-back updates.<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191121175241\/02-v11-1.png\" width=\"2400\" height=\"1620\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n\n<p>Evergreen is based on Kubernetes and balances control and access to scalable container technology by providing a fully managed serverless service operated by Salesforce. This service lets you focus more on innovation rather than infrastructure operations. Evergreen opens Salesforce development to any development team because apps, functions and services can be built using common open languages, tools and technologies.<\/p>\n<p>At the Dreamforce 2019 <a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJ9vQAG\">Developer Keynote<\/a>, we showcased how Salesforce customers like Caesars Entertainment can build a modern guest check-in experience using Evergreen. In the keynote demo, the Lightning Platform is used to quickly create an employee-facing iOS app for managing housekeeping and room-readiness and that is seamlessly extended with event-driven functions running on Evergreen. When housekeeping marks a room as ready using the employee app, a platform event triggers a Node.js function that uses guest-context to send a tailored real-time notification letting the guest know that the room is ready for early check-in.<\/p>\n<p>At the end of the stay, the Salesforce Flow powering the guest checkout can call out to a different function with invoicing details. The Node.js function can use the invoice details and an npm PDF module to quickly generate a bill. Here\u2019s the sample function that receives the request as a <a href=\"https:\/\/cloudevents.io\/\">CloudEvent<\/a> fetches additional data, generates a PDF and adds a link to the PDF from the guest booking record:<\/p>\n<pre>import { UnitOfWork, SObject } from '@salesforce\/functions';\r\nimport { PDFDocument } from 'pdfkit';\r\nimport * as fs from 'fs';\r\n\r\nmodule.exports = async function(event, context, logger) {\r\n    const folioPayload = event.payload;\r\n\r\n    \/\/ Creating a new Unit Of Work instance\r\n    const uow = UnitOfWork;\r\n\r\n    \/\/ Run SOQL query to fetch folio data\r\n    const query = `SELECT Id, Description__c, Amount__c, Date__c FROM Booking_LineItems__c WHERE Reservation__c = \r\n    '${folioPayload.recordId}'`;\r\n    const folioLineItems = await context.sfApi.query(query);\r\n\r\n    \/\/ Call function to generate PDF and store in external data store\r\n    \/\/ for Files Connect\r\n    const pdfFilesConnect = await generatePdf(\r\n        folioPayload.recordId,\r\n        folioLineItems\r\n    );\r\n\r\n    \/\/ Update the booking object\r\n    const ReservationObject = new SObject('Reservation__c');\r\n    ReservationObject.Id = folioPayload.recordId;\r\n    ReservationObject.Status__c = 'Paid and Folio created';\r\n    uow.registerModified(ReservationObject);\r\n\r\n    \/\/ Update data\r\n    uow.commit();\r\n};\r\n\r\nasync function generatePdf(id, lineItems) {\r\n    # generate and store folio PDF\r\n}<\/pre>\n<p>Functions running on Evergreen idle when not in use and automatically scale to handle any invocation load or event throughput. Functions are easy to build from source with <a href=\"https:\/\/engineering.salesforce.com\/standardizing-heroku-buildpacks-with-cncf-a43525f6c441\">Cloud Native Buildpacks<\/a> and developers are free to use any supported programming language and to pull in any package or library that\u2019s going to help them get their job done.<\/p>\n<p>Evergreen is the latest addition to the Salesforce Platform, combining Heroku\u2019s decade-long experience building scalable container runtimes and high-performance data stores with Lightning tools and features. The unique combination of serverless, elastic container technology and seamless access to customer data and low-code business logic makes Salesforce the obvious place to build and run the differentiated digital experiences that impress your customers, partners and employees.<\/p>\n<p>A limited access developer preview of Evergreen will be available with the Spring \u201920 release in February. <a href=\"https:\/\/www.salesforce.com\/form\/signup\/salesforce-evergreen\/\">Sign up to get Evergreen updates<\/a>. You can also watch the <a href=\"https:\/\/www.salesforce.com\/video\/7490459\">Dreamforce Developer Keynote recording<\/a> to see an Evergreen demo. If you\u2019re joining us on-site at #DF19, drop by the Dreamforce Evergreen booth at Platform Park in the Trailhead area (At Moscone West) to learn more, or join us for these Evergreen-focused Dreamforce breakout sessions:<\/p>\n<ul>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJOtQAO\">Build More on the Salesforce Platform with Evergreen Functions: An Elastic Runtime for Node.js<\/a> &#8211; Wed, Nov 20, (2:30-2:50pm), Moscone West (Surfside Theater)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJLoQAO\">Salesforce Evergreen and Evergreen Functions: Build evented serverless consumer apps<\/a> &#8211; Thurs, Nov 21 (3-3:40pm), Moscone West (Room 2007)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJXBQA4\">Evented enterprise app architectures with Salesforce Evergreen and Evergreen Functions<\/a> &#8211; Thurs, Nov 21 (5-5:40pm), Moscone West (Room 2024)<\/li>\n<li><a href=\"https:\/\/success.salesforce.com\/sessions?eventId=a1Q3A000021ea1UUAQ#\/session\/a2q3A000002BJO9QAO\">Salesforce Evergreen and Evergreen Functions: Build evented serverless consumer apps<\/a> &#8211; Fri, Nov 22, (12-12:40pm), Moscone West (Surfside Theater)<\/li>\n<\/ul>\n","acf":{"canonicalid":"","language":"english","audio_url":"https:\/\/a.sfdcstatic.com\/developer-website\/blog-audio\/192806\/192806.mp3","hash":"269559fb4c381777d02501421f365173","transcription_id":"ae7d4c7c-707b-40e7-8a30-7d45b4784f88","ready":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.3 (Yoast SEO v25.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform - Salesforce Developers Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Delightful and cohesive digital experiences make for happy customers, partners and employees, and building those modern experiences requires direct and seamless access to Customer 360 data and business logic. That\u2019s why we\u2019re excited to announce Salesforce Evergreen \u2014 a new addition to the Customer 360 Platform that brings in serverless functions based on fully-managed [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen\" \/>\n<meta property=\"og:site_name\" content=\"Salesforce Developers Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-20T17:20:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-05T09:21:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png\" \/>\n\t<meta property=\"og:image:width\" content=\"200\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Michael Friis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SalesforceDevs\" \/>\n<meta name=\"twitter:site\" content=\"@SalesforceDevs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Friis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen\",\"url\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen\",\"name\":\"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform - Salesforce Developers Blog\",\"isPartOf\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage\"},\"image\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage\"},\"thumbnailUrl\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png\",\"datePublished\":\"2019-11-20T17:20:00+00:00\",\"dateModified\":\"2025-11-05T09:21:20+00:00\",\"author\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/182b832107ae7bf2e33a83945cf5e446\"},\"breadcrumb\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage\",\"url\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png\",\"contentUrl\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png\",\"width\":200,\"height\":200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.salesforce.com\/blogs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#website\",\"url\":\"https:\/\/developer.salesforce.com\/blogs\/\",\"name\":\"Salesforce Developers Blog\",\"description\":\"Elevating developer skills and connecting with the Salesforce Developers community\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.salesforce.com\/blogs\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/182b832107ae7bf2e33a83945cf5e446\",\"name\":\"Michael Friis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/image\/83027be2521b317a2935359c44f67245\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/110ead42b39c31811f1df87bdbf3634334e41bc884fcd1699a14bedc8318b1f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/110ead42b39c31811f1df87bdbf3634334e41bc884fcd1699a14bedc8318b1f5?s=96&d=mm&r=g\",\"caption\":\"Michael Friis\"},\"url\":\"https:\/\/developer.salesforce.com\/blogs\/author\/michael-friis\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform - Salesforce Developers Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen","og_locale":"en_US","og_type":"article","og_title":"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform","og_description":"&nbsp; Delightful and cohesive digital experiences make for happy customers, partners and employees, and building those modern experiences requires direct and seamless access to Customer 360 data and business logic. That\u2019s why we\u2019re excited to announce Salesforce Evergreen \u2014 a new addition to the Customer 360 Platform that brings in serverless functions based on fully-managed [&hellip;]","og_url":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen","og_site_name":"Salesforce Developers Blog","article_published_time":"2019-11-20T17:20:00+00:00","article_modified_time":"2025-11-05T09:21:20+00:00","og_image":[{"width":200,"height":200,"url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png","type":"image\/png"}],"author":"Michael Friis","twitter_card":"summary_large_image","twitter_creator":"@SalesforceDevs","twitter_site":"@SalesforceDevs","twitter_misc":{"Written by":"Michael Friis","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen","url":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen","name":"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform - Salesforce Developers Blog","isPartOf":{"@id":"https:\/\/developer.salesforce.com\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage"},"image":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage"},"thumbnailUrl":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png","datePublished":"2019-11-20T17:20:00+00:00","dateModified":"2025-11-05T09:21:20+00:00","author":{"@id":"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/182b832107ae7bf2e33a83945cf5e446"},"breadcrumb":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#primaryimage","url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png","contentUrl":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png","width":200,"height":200},{"@type":"BreadcrumbList","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/11\/introducing-salesforce-evergreen#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.salesforce.com\/blogs"},{"@type":"ListItem","position":2,"name":"Evergreen: Serverless Functions &amp; Compute for Customer 360 Platform"}]},{"@type":"WebSite","@id":"https:\/\/developer.salesforce.com\/blogs\/#website","url":"https:\/\/developer.salesforce.com\/blogs\/","name":"Salesforce Developers Blog","description":"Elevating developer skills and connecting with the Salesforce Developers community","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.salesforce.com\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/182b832107ae7bf2e33a83945cf5e446","name":"Michael Friis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/image\/83027be2521b317a2935359c44f67245","url":"https:\/\/secure.gravatar.com\/avatar\/110ead42b39c31811f1df87bdbf3634334e41bc884fcd1699a14bedc8318b1f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/110ead42b39c31811f1df87bdbf3634334e41bc884fcd1699a14bedc8318b1f5?s=96&d=mm&r=g","caption":"Michael Friis"},"url":"https:\/\/developer.salesforce.com\/blogs\/author\/michael-friis"}]}},"jetpack_featured_media_url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191115174440\/trailhead_module_salesforce_platform_basics.png","authors":[{"name":"Michael Friis","image_src":"https:\/\/secure.gravatar.com\/avatar\/110ead42b39c31811f1df87bdbf3634334e41bc884fcd1699a14bedc8318b1f5?s=24&d=mm&r=g"}],"_links":{"self":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/users\/3537"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/comments?post=192806"}],"version-history":[{"count":13,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192806\/revisions"}],"predecessor-version":[{"id":201398,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192806\/revisions\/201398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/media\/192838"}],"wp:attachment":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/media?parent=192806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/categories?post=192806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/tags?post=192806"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/coauthors?post=192806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}