{"id":192561,"date":"2019-10-03T10:00:55","date_gmt":"2019-10-03T16:00:55","guid":{"rendered":"http:\/\/developer.salesforce.com\/blogs\/?p=192561"},"modified":"2025-11-05T02:21:31","modified_gmt":"2025-11-05T09:21:31","slug":"announcing-lwc-local-development-beta","status":"publish","type":"post","link":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta","title":{"rendered":"Announcing LWC Local Development Beta"},"content":{"rendered":"<p>The wait is over! Today, I am happy to share with you the first release of Local Development for the Lightning Platform. Local Development enables you to build, run, and test your Lightning Web Components without deploying your code to your Salesforce org. This will dramatically decrease the time it takes to build apps with LWC.<\/p>\n<p>To jump right in, take a look at the <a href=\"https:\/\/developer.salesforce.com\/tools\/vscode\/articles\/lwc\/localdev\">documentation<\/a> and start using this feature today. Since this is a beta, there will be bugs and missing features &#8211; please let us know if you encounter any problems by opening a <a href=\"https:\/\/github.com\/forcedotcom\/lwc-dev-server-feedback\/issues\">Github Issue.<\/a><\/p>\n<p>Local Development is a plugin for the Salesforce CLI. Eventually, this will ship with the Salesforce CLI out of the box, but for now you will need to install it by running the following command.<\/p>\n<pre>sfdx plugins:install @salesforce\/lwc-dev-server<\/pre>\n<p>Once, the plugin is installed you can run the Local Development Server on your Salesforce project by running the start command. Note that you will want to be authorized into an org before you start the server so you can take advantage of the data proxy features. See the full documentation for details.<\/p>\n<pre>sfdx force:lightning:lwc:start<\/pre>\n<p>There are three main areas where we are aiming to improve developer productivity with Local Development. The first is the ability to render components locally in as close to a real environment as possible. The goal is that if your component works locally, it will work in the org.<\/p>\n<p>When you first start up the Local Development Server you will see a screen that lists all of the components in your project. You can search for components and select the component you want to open.<\/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\/20191002164903\/image-e1570060156604.png\" class=\"postimages\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<br \/>\nWhen you open a component you will see it render in the browser without deploying to the org. From the component preview page you can even click the blue \u201cView in VS Code\u201d button to quickly open the code for this component. When you make changes to the component, you will see those changes refresh in the browser immediately.<\/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\/20191002164946\/image-1-e1570060320800.png\" class=\"postimages\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>The second thing we aim to do with Local Development is to make it easier and faster to find and solve errors. Typically with Salesforce development you often won\u2019t find a mistake in your code until you try to deploy to your org \u2014 you will see an error in the console that sometimes can be a little tricky to parse and figure out what caused the error. With Local Development you can immediately see errors in the browser along with details such as the exact error message, the file and line where the error occurred, and a code snippet and stack trace to immediately identify the error. Better yet, you can click the link \u201cGo to source (vscode)\u201d to open the file to the exact line where that error occurred and quickly fix the problem.<\/p>\n<p>It is this easy: see in the image below that I referenced the <code>@wired<\/code> decorator instead of the <code>@wire<\/code> decorator. I can then click the \u201cGo to source\u201d link, fix my typo, save the file, and immediately see the fix take effect.<\/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\/20191002165232\/image-2-e1570060360352.png\" class=\"postimages\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>The final area we have enabled in Local Development is integration with real org data. Because most of your components involve using some form of Salesforce data it is important to be able to consume that data even when running locally. With Local Development, requests for data using Lightning Data Service or Apex will get proxied to your Salesforce Org and returned in your local components. You can do anything locally that you can do in your org such as create and update records, call apex controllers, and use decorators such as <code>@wire<\/code>.<\/p>\n<p>In order to see the product card show real data, you can hard code the component\u2019s <code>recordId<\/code> property to use a specific record. Then the component will render just as it would in the org. In coming releases, there will be tools in the Local Development Server to set component attributes so that it won\u2019t be necessary to hard code development values when running and debugging locally.<\/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\/20191002165304\/image-3-e1570060391676.png\" class=\"postimages\" width=\"800\" height=\"293\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/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\/20191002165334\/image-4-e1570060488770.png\" class=\"postimages\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<h2>Roadmap<\/h2>\n<p>Today with the beta release of Local Development, we are setting the foundation of a super productive UI developer experience for Salesforce developers. However, this isn\u2019t the final stop. We will continue to add enhancements and remove the <a href=\"https:\/\/developer.salesforce.com\/tools\/vscode\/articles\/lwc\/localdev#working-with-modules-and-components\">current limitations<\/a> to make Local Development more similar to running in a Salesforce org. Additionally, there are some tooling enhancements that will make working with components even easier. The following items are on our roadmap:<\/p>\n<ul>\n<li>Integration with Visual Studio Code and Illuminated Cloud to enable running the server and opening components without having to use the CLI directly<\/li>\n<li>Locker Support<\/li>\n<li>Support for all base components<\/li>\n<li>Support for all modules such as <code>@salesforce\/apexContinuation<\/code> and <code>@salesforce\/contentAssetUrl<\/code><\/li>\n<li>Tooling to manipulate component attributes without hard coding values<\/li>\n<li>Debugging directly in Visual Studio Code<\/li>\n<\/ul>\n<p>Please also let us know what you would like to see and any issues you encounter by creating <a href=\"https:\/\/github.com\/forcedotcom\/lwc-dev-server-feedback\/issues\">Github Issues<\/a>. We hope you enjoy Local Development and that it makes your Salesforce development experience even more enjoyable and productive!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The wait is over! Today, I am happy to share with you the first release of Local Development for the Lightning Platform. Local Development enables you to build, run, and test your Lightning Web Components without deploying your code to your Salesforce org. This will dramatically decrease the time it takes to build apps with [&hellip;]<\/p>\n","protected":false},"author":3488,"featured_media":189866,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2764],"tags":[2586,2647,2623,2678,2646],"coauthors":[],"class_list":["post-192561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-new-developments","tag-lightning-web-components","tag-lightning-web-components-local-development","tag-local-development","tag-lwc","tag-october-2019"],"podcast_audio":{"audio_url":"","duration":""},"featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png?w=200","related_posts":[{"post":{"ID":203138,"post_author":"3668","post_date":"2024-09-11 10:00:09","post_date_gmt":"2024-09-11 16:00:09","post_content":"Earlier this year, <a href=\"https:\/\/developer.salesforce.com\/blogs\/2024\/04\/lightning-experience-performance-first-anniversary-results-and-outlook\">we shared the results<\/a> from the first year of our journey to improve Lightning Experience performance for all Salesforce customers.\r\n\r\nToday, we\u2019re excited to share the most recent results achieved in production. In this post, we\u2019ll highlight several large-scale efforts that converged recently and outline what you should expect later this year.\r\n\r\nWithout further ado, let\u2019s dive right in!\r\n<h2>What we\u2019ve achieved so far in 2024<\/h2>\r\nIn our <a href=\"https:\/\/developer.salesforce.com\/blogs\/2024\/04\/lightning-experience-performance-first-anniversary-results-and-outlook\">April blog post<\/a>, we reflected on the program\u2019s anniversary and its achievement of a 12% improvement in <a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.technical_requirements_ept.htm&amp;type=5\">Experience Page Time<\/a> (EPT) for most navigations.\r\n\r\nAfter rolling out more improvements since then, we\u2019re measuring the following results:\r\n<ul>\r\n \t<li><b>Both first and subsequent navigations are now 25% faster than our March 2023 baseline<\/b>\r\n<ul>\r\n \t<li>First navigations are now more than two seconds faster<\/li>\r\n \t<li>Subsequent navigations are now nearly one second faster<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li>We continue to be on track to <span>achieve a 40% total EPT improvement for first page views by early next year, through our currently planned efforts <\/span><\/li>\r\n<\/ul>\r\nWe used our methodology to translate this into productivity gains for Salesforce users, estimating that:\r\n\r\n<em><b>At the Salesforce scale, our users are getting an aggregate of 11 years of productivity saved daily, or about 6 months of productivity gained every hour!<\/b><\/em>\r\n\r\nHere\u2019s how the timeline now looks with the new updates:\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/09\/image-2024-09-11T094555.152.png\" alt=\"A timeline that shows progress since the last blog post in April 2024\" width=\"806\" height=\"434\" class=\"alignnone wp-image-203139\" \/>\r\n<h2>Improvements coming soon to Lightning Experience<\/h2>\r\nWe continue to use progressive rollout to get features to production (as noted in our previous posts). The process has been working as designed for over a year, delivering consistent performance improvements without noticeable impacts on availability.\r\n\r\n<span>Highlights of the features that have been rolled out include:<\/span>\r\n<ul>\r\n \t<li><b>HTTP\/2-enabled feature:<\/b> We\u2019ve increased the Aura request limit from six to 12, allowing our servers to process more work in parallel.<\/li>\r\n \t<li><b>HTTP\/2-enabled feature:<\/b> We\u2019ve disabled Aura component bundling.<\/li>\r\n \t<li><b>User-agnostic FlexiPages:<\/b> We\u2019ve enabled this for standard objects as a follow-up to custom objects (see the section below for details).<\/li>\r\n \t<li><b>LWC related record<\/b>: You might have noticed that this was also present in the previous rollout plans. Our initial rollout attempt identified issues, and upon fixing them, we completed this rollout.<\/li>\r\n<\/ul>\r\n<span>Our other code changes for the Summer \u201924 release have not been enabled in production yet, and you should be able to observe their positive impact in the coming weeks as they\u2019re progressively enabled. <\/span>We look forward to rolling out the following features in the next few weeks:\r\n<ul>\r\n \t<li>Predictive Data Loading will be used in more situations:\r\n<ul>\r\n \t<li>Loading related lists<\/li>\r\n \t<li>Apex calls<\/li>\r\n \t<li>Predicting components used by a specific record home<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li>Further user-specific caching improvements<\/li>\r\n \t<li>Improvements to Aura applications\u2019 critical path\r\n<ul>\r\n \t<li>Page resolver optimizations<\/li>\r\n \t<li>Page earlier resolution<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li>Initial work to optimize the base HTML payload<\/li>\r\n<\/ul>\r\nLet\u2019s dive deeper into our HTTP\/2 journey and user-agnostic FlexiPages, both of which were part of <a href=\"https:\/\/developer.salesforce.com\/blogs\/2023\/09\/our-detailed-plan-to-improve-lightning-experience-performance\">our detailed plan to improve Lightning Experience performance <\/a>shared last year.\r\n<h2>Announcing HTTP\/2 first-hop availability for all entry points<\/h2>\r\nOver the last decade, various Salesforce engineering and network infrastructure experts considered the opportunity to upgrade load balancers to HTTP\/2 in order to get <a href=\"https:\/\/web.dev\/articles\/performance-http2\">various performance benefits<\/a>. This, however, turned out to be a true \u201c<a href=\"https:\/\/en.wikipedia.org\/wiki\/Chicken_or_the_egg\">chicken-or-egg<\/a>\u201d problem blocking earlier progress:\r\n<ul>\r\n \t<li>Study after study has demonstrated that <i>by itself<\/i> HTTP\/2 doesn\u2019t bring measurable performance benefits and would require major rethinking of data flows in Lightning Experience to extract value<\/li>\r\n \t<li>Major rethinking of data flows in Lightning Experience would require HTTP\/2 to prototype and validate potential improvements<\/li>\r\n<\/ul>\r\nFinally, with our Lightning Experience performance effort, we had the right motivation and opportunity for a HTTP\/2 upgrade.\r\n\r\nEarly on, the team <a href=\"https:\/\/developer.salesforce.com\/blogs\/2023\/09\/our-detailed-plan-to-improve-lightning-experience-performance\">identified performance opportunities<\/a> that would require HTTP\/2. As our performance effort matured, that state of HTTP\/2 dependency evolved from \u201cnice to have<i>\u201d<\/i> to \u201creally beneficial to our efforts\u201d to \u201ca critical dependency for most critical features.<i>\u201d <\/i>What\u2019s even more important is that when you start thinking <i>concurrently<\/i><i>,<\/i> there\u2019s no going back and HTTP\/1.1 would be pushed to the limit and it will no longer be able to sustain the new workload.\r\n\r\nWith this in mind, the Lightning Experience performance team has partnered with the Salesforce Network Infrastructure team to create and realize the plan to upgrade first-party load balancers to HTTP\/2. As much as we were excited about the performance opportunities of HTTP\/2, the availability and reliability of Salesforce experiences comes first and at Salesforce scale. Our plans had to be robust to prevent any negative impacts, even with a change as massive as an HTTP\/2 upgrade. Stay tuned for a more detailed technical post from the team that will describe this journey!\r\n\r\nAs of this blog post, <b>the upgrade process has been complete in every first-party point of deployment<\/b>, allowing us to enable features previously exclusive to Hyperforce (since Hyperforce had HTTP\/2 ready for us!) to all Salesforce customers.\r\n\r\nAs part of our commitment to enhancing performance across our ecosystem, we're pleased to announce that <a href=\"https:\/\/blog.heroku.com\/heroku-http2-public-beta\">Heroku will soon support HTTP\/2 as well<\/a>. This update will ensure a consistent, high-performance experience for developers working with Salesforce and Heroku, completing our broader HTTP\/2 enablement efforts across Salesforce. Developers leveraging both Salesforce and Heroku will benefit from faster loading times, improved performance, and enhanced page responsiveness, all within<b> <\/b>one unified development environment.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/09\/image-2024-09-11T094652.134-1779x1000.png\" alt=\"A diagram showing that as of August 2024, HTTP\/2 is the first hop for most navigations\" width=\"850\" height=\"478\" class=\"alignnone wp-image-203140\" \/>\r\n\r\nAnd it\u2019s not just individual features, Lightning Experience has been <i>practically reimagined<\/i> for a world with HTTP\/2. Here are some of the guiding principles and changes we\u2019ve created to rationalize the opportunity for higher concurrency:\r\n<ul>\r\n \t<li>Previously, the framework would prioritize batching to create a few large requests. While this made sense with the limited number of requests allowed in HTTP\/1.1, it limits our performance once HTTP\/2 is available. For example:\r\n<ul>\r\n \t<li>Single large requests lead to longer idle time on the client waiting for ALL data to come back, instead of getting data in smaller chunks that can be processed individually and earlier.<\/li>\r\n \t<li>We missed the opportunity to cache individual requests that change less frequently, specifically when retrieving client-side components. Previously, we would retrieve as many components as possible in a single request, which made caching those requests much more difficult. We now retrieve components separately as a result of dramatically increased cache hit rates for those components.<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li>Additionally, we\u2019ve noticed that during critical periods of page construction, data fetching and DOM composition were conflicting with each other, leading to longer delays in processing readily available data and requesting more data. As a result, we prioritized requesting more data as early in page construction as possible (see \u201cPrefetch data at routing and predictive data loading\u201d in <a href=\"https:\/\/developer.salesforce.com\/blogs\/2024\/04\/lightning-experience-performance-first-anniversary-results-and-outlook\">the previous post<\/a>), leading to a significant number of requests early in the page lifecycle, which requires HTTP\/2 for the best results.<\/li>\r\n<\/ul>\r\n<h3><b>Call to action: Proxy misconfigurations could lead to much slower performance<\/b><\/h3>\r\nAs the Salesforce HTTP\/2 rollout was complete, we noticed that a small number of customers were not using HTTP\/2 despite its availability. Upon further investigation, we root caused this to various proxies on the customer side that forced HTTP\/1.1 traffic. This is most likely not desired for customer environments, and is possibly a sign of misconfiguration for those proxies.\r\n\r\nForcing HTTP\/1.1 would prevent the Lightning performance improvements we\u2019ve noted above, and <b>we\u2019re recommending that impacted customers revisit proxy configurations to fix this<\/b>. In order to check if you\u2019re impacted, you can observe the HTTP protocol version (HTTP\/1, HTTP\/1.1, or H2 for HTTP\/2) used for Salesforce navigations in the <a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/network\/reference\">Chrome DevTools Network tab<\/a> (or similar developer tools in other browser).\r\n\r\nNotably, this incorrect proxy configuration would negatively impact <i>every outbound connection, <\/i>whether going to first-party load balancers, Hyperforce, Salesforce Edge, or Lightning CDN.\r\n<h2>Faster pages resolution with user-agnostic FlexiPages<\/h2>\r\nThe next change we\u2019re excited to detail concerns the FlexiPages \u2014 and it\u2019s a major one.\r\n\r\n<a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.api_meta.meta\/api_meta\/meta_flexipage.htm\">FlexiPages<\/a> are the Salesforce Platform's way to describe an application page's composition, layout, and functionality, including rules and customizations for personas and individual users. As an administrator, you would create a page and specify visibility and other rules, and the underlying metadata would be saved as a FlexiPage.\r\n\r\nHistorically, all the user customization pivots were resolved on the server, leading to multiple copies of the same FlexiPages saved in cache. Not only did that lead to low cache hit rates, but actually getting to the cache was a performance challenge, and resolving the key for a given FlexiPage for each user with all possible pivots was measurably time-consuming.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/09\/image-2024-09-11T094733.741-1786x1000.png\" alt=\"A diagram that shows that before the user-agnostic approach, FlexiPages were resolved and served per user\" width=\"730\" height=\"409\" class=\"alignnone wp-image-203141\" \/>\r\n\r\nConsidering those findings, the team redesigned user pivots to move the resolution from the server to the client. As a result, user-agnostic FlexiPages were created. \u201cUser agnostic\u201d in that context means that FlexiPages in most cases are now stored as a single entity for all users, dramatically reducing the number of FlexiPage copies we store and cache. With that change, the client code is now resolving and handling all per-user customizations, which are no longer hardcoded into the page.\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2024\/09\/image-2024-09-11T094803.860-1784x1000.png\" alt=\"A diagram that shows user-agnostic FlexiPages being served much more efficiently to all users\" width=\"711\" height=\"398\" class=\"alignnone wp-image-203142\" \/>\r\n\r\nGiven the complexity of the underlying change, the team made sure that there is no impact to data integrity and access permissions. If the user didn\u2019t have visibility to particular data before, they still won\u2019t be able to observe that data with the user-agnostic change.\r\n\r\nAnd given the performance focus of that change, the team carefully measured client-side impacts and confirmed every aspect of the performance improvements that they hoped to achieve, including:\r\n<ul>\r\n \t<li><b>User-agnostic FlexiPages cache keys<\/b> are dramatically faster to resolve, effectively removing the previous server-side bottleneck<\/li>\r\n \t<li><b>FlexiPages\u2019 cache hit rate<\/b> has increased substantially (an order of magnitude better) since now the same copy of the FlexiPages is delivered to all organization users<\/li>\r\n \t<li><b>Client-side customizations<\/b> are not decreasing performance for individual users, given that the amount of change for individual users is tiny (versus resolving all the pivots for all organization users every time the page is requested by a user)<\/li>\r\n<\/ul>\r\nHowever, just creating this capability was not enough to get all the anticipated performance benefits. To take advantage of this, our team has converted all standard entity record homes to be user agnostic, covering Account, Contact, Opportunity, Case, and Lead. The remaining 1,300 standard entity record homes that have been converted to be user-agnostic will be rolling out soon!\r\n\r\nAnd just to recap \u2014 earlier, the team had enabled the user-agnostic approach for custom objects, so this will work for both standard and custom objects consistently with no admin changes required!\r\n\r\nOverall, this change has led to significantly more efficient FlexiPages, and we\u2019re exploring the next set of improvements that can be built upon this foundation, applying the user-agnostic approach to more problematic areas, as well as tuning caching and resolution of FlexiPages.\r\n<h2>Conclusion<\/h2>\r\nWe can\u2019t wait to roll out all of the features we\u2019ve described in this post for you to enjoy over the next few weeks!\r\n\r\nAnd to wrap this post up, here are some of the topics that we\u2019re hoping to cover in future posts:\r\n<ul>\r\n \t<li>The next set of features that would get us to our original goal of 40% first page load improvements<\/li>\r\n \t<li>Our efforts to prevent regressions \u2014 any gains we achieve are only possible through diligently preventing regressions from eating into our results<\/li>\r\n \t<li>Our vision for the next-level improvements and goals for the next year<\/li>\r\n<\/ul>\r\n<span>We hope you enjoy reading our posts as much as we enjoy writing them. Stay tuned for more updates coming soon!<\/span>\r\n<h2>Resources<\/h2>\r\n<span>Want to learn more about how our Lightning Experience performance journey started? Check out the earlier blog posts in this series:<\/span>\r\n<ul>\r\n \t<li><a href=\"https:\/\/developer.salesforce.com\/blogs\/2023\/03\/lightning-experience-with-lightning-speed-are-we-there-yet\">Lightning Experience with Lightning Speed (Are We There Yet?)<\/a><\/li>\r\n \t<li><a href=\"https:\/\/developer.salesforce.com\/blogs\/2023\/09\/our-detailed-plan-to-improve-lightning-experience-performance\">Our Detailed Plan to Improve Lightning Experience Performance<\/a><\/li>\r\n \t<li><a href=\"https:\/\/developer.salesforce.com\/blogs\/2024\/04\/lightning-experience-performance-first-anniversary-results-and-outlook\">Lightning Experience Performance: First Anniversary, Results, and Outlook<\/a><\/li>\r\n<\/ul>\r\n<span>Looking for resources to get started with Lightning performance? Check out the following Trailhead modules:<\/span>\r\n<ul>\r\n \t<li><a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/modules\/performance-troubleshooting-in-lwc\">Performance Troubleshooting in Lightning Web Components<\/a><\/li>\r\n \t<li><a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/modules\/lightning-experience-performance-optimization\">Lightning Experience Performance Optimization<\/a><\/li>\r\n<\/ul>\r\n<span>Want to chime in with support for this effort? Consider upvoting this <\/span><a href=\"https:\/\/ideas.salesforce.com\/s\/idea\/a0B8W00000GdcZVUAZ\/lightning-experience-lex-lightning-speed-please\">IdeaExchange idea<\/a><span>!<\/span>\r\n<h2>Thank you to our contributors<\/h2>\r\nThis post would not have happened without contributions from these amazing individuals (listed in alphabetical order): Alsontra Daniels, Benjamin Fry, Binzy Wu, Chad Pembleton, Daniel Takacs, Eric Perret, Ethan Clapham, Jose David Rodriguez Velasco, Kevin Hill, Matt Stevens, Matthew Curry, Mayur Enjamoori, Michael Marsh, Mingzhou Nie, Onkar Mayenkar, Roberto Edgar, Sukrutha Bhadouria, Traisa Brockmann, Xiaoxu Gu, and Pierre Marie-Dartus.\r\n<h2>About the authors<\/h2>\r\n<b>Bogdan Brinza<\/b> (he\/him) is a Senior Director of Product leading the Web Platform team that enables Lightning Experience. He is passionate about tuning web experiences to be faster. Follow him on <a href=\"https:\/\/github.com\/boggydigital\">GitHub<\/a>.\r\n\r\n<b>Martin Presler-Marshall<\/b> (he\/him) works as a Software Engineering Architect at Salesforce for the Web Platform team. With over two decades of experience on software performance, he focuses mainly on server efficiency and UI performance.\r\n\r\n<b>Ahmed Ghanem <\/b>is a Director of Product on the Web Platform team responsible for data and performance in Lightning Experience. He is passionate about improving performance and efficiency. Follow him on <a href=\"https:\/\/www.linkedin.com\/in\/ahmedg00\/\">LinkedIn<\/a>.\r\n\r\n<b>Nate Hossner <\/b>is a Director of Product Management for list views and related lists at Salesforce. His background is in Service Cloud, automation, and user experience.","post_title":"Announcing 25% Faster Lightning Experience","post_excerpt":"In this post, we\u2019ll highlight several large-scale Lightning Experience efforts that converged recently and outline what you can expect soon.","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"announcing-25-faster-lightning-experience","to_ping":"","pinged":"","post_modified":"2025-11-05 02:12:44","post_modified_gmt":"2025-11-05 09:12:44","post_content_filtered":"","post_parent":0,"guid":"https:\/\/developer.salesforce.com\/blogs\/?p=203138","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw","featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20240911102336\/Codey-V2-2.png?w=1200","link":"https:\/\/developer.salesforce.com\/blogs\/2024\/09\/announcing-25-faster-lightning-experience","podcast_audio":{"audio_url":"","duration":""},"authors":[{"name":"Bogdan Brinza","image_src":"https:\/\/secure.gravatar.com\/avatar\/24bc67922daea109be12e47b568a1f9c3531f20fd1ccef72de1410dcb593b955?s=24&d=mm&r=g"},{"name":"Martin Presler-Marshall","image_src":"https:\/\/secure.gravatar.com\/avatar\/9a2d3ae42e2c73fd8750906955d409ee0e5c2bdd0f88d35d9a9f65052f4d5987?s=24&d=mm&r=g"}]}},{"post":{"ID":204914,"post_author":"3081","post_date":"2025-10-23 08:00:05","post_date_gmt":"2025-10-23 14:00:05","post_content":"<span style=\"font-weight: 400\">Text-based interactions are powerful when running prompts with an agent, but you can get more benefits by upgrading to richer conversations with images, links, and custom components. Since the Spring \u201925 release, we now have a new customization option: <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_response_ref.htm&amp;type=5\"><span style=\"font-weight: 400\">adaptive response formats<\/span><\/a><span style=\"font-weight: 400\">. This feature lets agents choose how to best display responses in conversations based on the data that they return.\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400\">In this post, we\u2019ll give you an overview of the agent conversation customization options in Agentforce, and then explore adaptive response formats and how to use them in your applications.<\/span>\r\n\r\nhttps:\/\/youtu.be\/hp_k8qsSw54\r\n<h2><span style=\"font-weight: 400\">Overview of agent conversation customization options<\/span><\/h2>\r\n<span style=\"font-weight: 400\">There are a number of ways to customize the user experience in agent conversations. In a <\/span><a href=\"https:\/\/developer.salesforce.com\/blogs\/2025\/07\/enhance-the-agent-ui-with-custom-lwcs-and-lightning-types\"><span style=\"font-weight: 400\">previous post<\/span><\/a><span style=\"font-weight: 400\">, we presented <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/einstein\/genai\/guide\/lightning-types.html\"><span style=\"font-weight: 400\">custom Lightning types<\/span><\/a><span style=\"font-weight: 400\"> that let you add custom Lightning web components in a conversation.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/Screenshot-of-a-custom-Lightning-type-displaying-weather-information-in-an-agent-conversation.png\" alt=\"Screenshot of a custom Lightning type displaying weather information in an agent conversation\" width=\"426\" height=\"352\" class=\"alignnone size-full wp-image-204921\" \/>\r\n\r\n<span style=\"font-weight: 400\">The new adaptive response formats feature is an interesting option as it does not require front-end development skills. However, this comes at the expense of flexibility when compared to custom Lightning types.<\/span>\r\n\r\n<span style=\"font-weight: 400\">Agentforce features evolve rapidly, so the following information is bound to change over time. As of August 2025, this is a comparison of the different customization options:<\/span>\r\n<table>\r\n<tbody>\r\n<tr>\r\n<td><\/td>\r\n<td><b>Custom Lightning types<\/b><\/td>\r\n<td><b>Adaptive response formats<\/b><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><b>Deployment target<\/b><\/td>\r\n<td><span style=\"font-weight: 400\">Lightning Experience<\/span>\r\n\r\n<span style=\"font-weight: 400\">Experience Cloud support is being considered as we write this post (forward-looking statement).<\/span><\/td>\r\n<td><span style=\"font-weight: 400\">Various <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_surfaces_ref.htm&amp;type=5\"><span style=\"font-weight: 400\">messaging channels<\/span><\/a><span style=\"font-weight: 400\">, excluding Experience Cloud sites<\/span><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><b>Agent type<\/b><\/td>\r\n<td><span style=\"font-weight: 400\">Agentforce Employee Agents<\/span><\/td>\r\n<td><span style=\"font-weight: 400\">Agentforce Service Agents<\/span><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><b>Implementation<\/b><\/td>\r\n<td><span style=\"font-weight: 400\">Code-based (LWC)<\/span><\/td>\r\n<td><span style=\"font-weight: 400\">Automatic formatting based on the data returned in the agent response<\/span><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><b>Ability to customize inputs<\/b><\/td>\r\n<td><span style=\"font-weight: 400\">With a custom Lightning web component (editor)<\/span><\/td>\r\n<td><span style=\"font-weight: 400\">With rich choices<\/span><\/td>\r\n<\/tr>\r\n<tr>\r\n<td><b>Ability to customize outputs<\/b><\/td>\r\n<td><span style=\"font-weight: 400\">With a custom Lightning web component (renderer)<\/span><\/td>\r\n<td><span style=\"font-weight: 400\">With either rich links or rich choices<\/span><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<span style=\"font-weight: 400\">The two customization options don\u2019t overlap, so you do not need to choose between the two. Your deployment target is what will orient the technology choice.<\/span>\r\n\r\n<span style=\"font-weight: 400\">Now that you\u2019ve seen the big picture, let\u2019s explore how adaptive response formats work.<\/span>\r\n<h2><span style=\"font-weight: 400\">Exploring adaptive response formats<\/span><\/h2>\r\n<span style=\"font-weight: 400\">Adaptive response formats are available in a number of <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_surfaces_ref.htm&amp;type=5\"><span style=\"font-weight: 400\">channels<\/span><\/a><span style=\"font-weight: 400\">, but remember that these do not include Experience Cloud sites. There are currently two adaptive response formats available: rich choice and rich link. The appearance of the response depends on the channel and any customizations you make (e.g. instructions, actions, Apex, etc).<\/span>\r\n\r\n<span style=\"font-weight: 400\">A <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_response_ref_rich_choice.htm&amp;type=5\"><b>rich choice<\/b><\/a><span style=\"font-weight: 400\"> response is a list of items that are presented in a carousel, buttons, list selector, or text.<\/span>\r\n\r\n<span style=\"font-weight: 400\">For example, each carousel tile contains a title, a description, a link, and an image. The maximum number of items that can be displayed in the carousel depends on the channel type and how the rich choice response is presented. Depending on the channel and conversation context, clicking a carousel tile will send the tile label in the agent conversation as an input for the agent.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/Screenshot-of-a-rich-choice-showing-one-of-four-Coral-Cloud-experiences-e1759431318841.png\" alt=\"Screenshot of a rich choice showing one of four Coral Cloud experiences\" width=\"357\" height=\"492\" class=\"alignnone size-full wp-image-204923\" \/>\r\n\r\n<span style=\"font-weight: 400\">A <\/span><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_response_ref_rich_link.htm&amp;type=5\"><b>rich link<\/b><\/a><span style=\"font-weight: 400\"> response is displayed as a link, a media card, or text. The card includes a link with a title, a description, and an image.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/Screenshot-of-a-rich-link-showing-a-single-Coral-Cloud-experience.png\" alt=\"Screenshot of a rich link showing a single Coral Cloud experience\" width=\"343\" height=\"492\" class=\"alignnone size-full wp-image-204924\" \/>\r\n<h3><span style=\"font-weight: 400\">Customizing responses<\/span><\/h3>\r\n<span style=\"font-weight: 400\">The content of rich links and rich choices can both be returned from Apex actions and flow actions. What matters is the structure of the data that is returned in the agent\u2019s response.<\/span>\r\n\r\nFor a rich link, these fields must be returned:\r\n<ul>\r\n \t<li><code>linkTitle<\/code>: A string that serves as the label<\/li>\r\n \t<li><code>linkUrl<\/code>: A string that holds the URL of the link<\/li>\r\n \t<li><code>linkImageUrl<\/code>: A string that holds the URL of the image<\/li>\r\n \t<li><code>linkImageMimeType<\/code>: An optional string that holds the <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/MIME_types\"><u>MIME type<\/u><\/a> of the image<\/li>\r\n \t<li><code>description<\/code>: An optional string that holds the text sent immediately before the rich link<\/li>\r\n<\/ul>\r\nFor rich choice, a list of elements must be returned with these fields:\r\n<ul>\r\n \t<li><code>name<\/code>: A string that serves as the label<\/li>\r\n \t<li><code>imageUrl<\/code>: A string that holds the URL of the image<\/li>\r\n \t<li><code>mimeType<\/code>: An optional string that holds the MIME type of the image<\/li>\r\n \t<li><code>description<\/code>: An optional string that holds the text sent immediately before the rich choice<\/li>\r\n<\/ul>\r\nMIME type fields are optional for both response types, but we recommend that you provide them for performance reasons.\r\n\r\nNow that we\u2019ve covered the data structure of adaptive responses, let\u2019s take a look at some implementation examples.\r\n\r\nAn Apex invocable action can output the content for a rich choice by returning a list of items like this:\r\n<pre language=\"apex\">@InvocableMethod(...)\r\npublic static List myApexAction(List inputs) {\r\n   \/\/ Do something and return a list of ResponseWrapper\r\n}\r\n\r\npublic class ResponseWrapper {\r\n  @InvocableVariable(...)\r\n  public List items;\r\n}\r\n\r\npublic class Item {\r\n  public String name;\r\n  public String imageUrl;\r\n  public String mimeType;\r\n  public String description;\r\n}\r\n<\/pre>\r\n<span style=\"font-weight: 400\">A flow action can return a rich link by returning variables that are marked as available for output:<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/Screenshot-of-a-flow-that-has-output-variables-set-up-for-displaying-a-rich-link-e1759431274600.png\" alt=\"Screenshot of a flow that has output variables set up for displaying a rich link\" width=\"1000\" height=\"526\" class=\"alignnone size-full wp-image-204922\" \/>\r\n\r\n<span style=\"font-weight: 400\">You can see complete implementation examples of adaptive responses in our <\/span><a href=\"https:\/\/github.com\/trailheadapps\/coral-cloud\"><span style=\"font-weight: 400\">Coral Cloud sample app<\/span><\/a><span style=\"font-weight: 400\"> with the <\/span><b>List Experience Types<\/b><span style=\"font-weight: 400\"> Apex action and the <\/span><b>Get Experience Details<\/b><span style=\"font-weight: 400\"> flow action.<\/span>\r\n<h3><span style=\"font-weight: 400\">Testing your customizations<\/span><\/h3>\r\n<span style=\"font-weight: 400\">You can quickly test adaptive responses from Lightning Experience by using the messaging deployment test page with these instructions:<\/span>\r\n<ol>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Make sure that your service agent is active.<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">From <\/span><b>Salesforce Setup<\/b><span style=\"font-weight: 400\">, go to <\/span><b>Embedded Service Deployments<\/b><span style=\"font-weight: 400\">.<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Select the deployment that you\u2019ve configured for your service agent.<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Click on the <\/span><b>Test Messaging<\/b><span style=\"font-weight: 400\"> tile.<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Open an agent conversation by clicking on the chat icon on the lower right of the screen, and interact with your agent.<\/span><\/li>\r\n<\/ol>\r\n<h2>Conclusion<\/h2>\r\n<span style=\"font-weight: 400\">This concludes our tour of the different options for customizing agent conversations and our deep dive into adaptive response formats. This feature opens the door to a set of rich agentic experiences on various channels. Stay tuned as we add more adaptive response formats and customization options!<\/span>\r\n<h2><span style=\"font-weight: 400\">Resources<\/span><\/h2>\r\n<ul>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Agentforce Decoded video: <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=hp_k8qsSw54&amp;list=PLgIMQe2PKPSIELU1F09KPVyLF-V_N8jem&amp;index=2\"><span style=\"font-weight: 400\">Customize Agent Conversations with Adaptive Response Formats<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Documentation:<\/span>\r\n<ul>\r\n \t<li style=\"font-weight: 400\"><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=ai.agent_response_ref.htm&amp;type=5\"><span style=\"font-weight: 400\">Standard Adaptive Response Format Reference<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><a href=\"https:\/\/developer.salesforce.com\/docs\/einstein\/genai\/guide\/lightning-types.html\"><span style=\"font-weight: 400\">Custom Lightning Types Developer Guide<\/span><\/a><\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">GitHub: <\/span><a href=\"https:\/\/github.com\/trailheadapps\/coral-cloud\"><span style=\"font-weight: 400\">Coral Cloud sample app<\/span><\/a><\/li>\r\n<\/ul>\r\n<h2>About the author<\/h2>\r\n<b>Philippe Ozil <\/b><span style=\"font-weight: 400\">is a Principal Developer Advocate at Salesforce, where he focuses on the Salesforce Platform. He writes technical content and speaks frequently at conferences. He is a full-stack developer and enjoys working with APIs, DevOps, robotics, and VR projects. Follow him on<\/span> <a href=\"https:\/\/x.com\/PhilippeOzil\"><span style=\"font-weight: 400\">X<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/www.linkedin.com\/in\/philippeozil\/\"><span style=\"font-weight: 400\">LinkedIn<\/span><\/a><span style=\"font-weight: 400\">, and <\/span><a href=\"https:\/\/bsky.app\/profile\/pozil.bsky.social\"><span style=\"font-weight: 400\">Bluesky<\/span><\/a><span style=\"font-weight: 400\">, and check out his<\/span> <a href=\"https:\/\/github.com\/pozil\"><span style=\"font-weight: 400\">GitHub projects<\/span><\/a><span style=\"font-weight: 400\">.<\/span>","post_title":"Customize Agent Conversations with Adaptive Response Formats","post_excerpt":"Use adaptive response formats in Agentforce to customize agent conversations and enable rich agentic experiences in your applications.","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"customize-agent-conversations-with-adaptive-response-formats","to_ping":"","pinged":"","post_modified":"2025-11-07 12:01:09","post_modified_gmt":"2025-11-07 19:01:09","post_content_filtered":"","post_parent":0,"guid":"https:\/\/developer.salesforce.com\/blogs\/?p=204914","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw","featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20251022122807\/SF-DEVS-25-02_AgentforceDecoded_Thumbnails_AdaptiveResponseFormats_1200x630.png?w=1200","link":"https:\/\/developer.salesforce.com\/blogs\/2025\/10\/customize-agent-conversations-with-adaptive-response-formats","podcast_audio":{"audio_url":"","duration":""},"authors":[{"name":"Philippe Ozil","image_src":"https:\/\/secure.gravatar.com\/avatar\/eb238a03783dc59bacdcc8217c71dc99a4afe9d1fa1ec2d901f3ad6ce1fe8105?s=24&d=mm&r=g"}]}},{"post":{"ID":205031,"post_author":"3791","post_date":"2025-10-28 09:00:43","post_date_gmt":"2025-10-28 15:00:43","post_content":"<span style=\"font-weight: 400\">The next generation of vibe coding is here! Salesforce first introduced the<\/span><a href=\"https:\/\/developer.salesforce.com\/blogs\/2025\/06\/level-up-your-developer-tools-with-salesforce-dx-mcp\"> <span style=\"font-weight: 400\">Model Context Protocol (MCP) server for Salesforce DX<\/span><span style=\"font-weight: 400\"> earlier this year,<\/span><\/a><span style=\"font-weight: 400\"> and at Dreamforce, we announced new tools that provide multiple ways to create new Lightning web components (LWCs) and improve the quality of existing components. The DX MCP Server is enabled by default in <\/span><a href=\"https:\/\/developer.salesforce.com\/blogs\/2025\/10\/unleash-your-innovation-with-agentforce-vibes-vibe-coding-for-the-enterprise\"><span style=\"font-weight: 400\">Agentforce Vibes<\/span><\/a><span style=\"font-weight: 400\">, our enterprise-focused agentic integrated development environment (IDE). Agentforce Vibes is powered by a collection of MCP tools hosted by the DX MCP Server.<\/span>\r\n\r\n<span style=\"font-weight: 400\">From prompt to production, our expanded MCP tools deliver accessibility, security, styling, tests, and more. Each tool is designed to perform a simple, targeted task. If you're already using an agentic IDE, the connective power of MCP lets our server meet you where you are, so you can get the most out of today's new tools for your LWC development.<\/span>\r\n\r\n<span style=\"font-weight: 400\">In this post, we\u2019ll cover three of the jobs that a large language model (LLM) can perform once it has access to our MCP tools:<\/span>\r\n<ul>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Creating a Lightning web component from a Figma design<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Enhancing existing components<\/span><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Converting an Aura component to an LWC<\/span><\/li>\r\n<\/ul>\r\nThese jobs use a subset of the <a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/mcp-reference.html\"><u>20+ component-related tools<\/u><\/a> available. The tools we\u2019ll cover here require the <code>aura-experts<\/code> and <code>lwc-experts<\/code> toolsets (in the Agentforce Vibes extension, for now, the <code>a4d-lwc-rules-no-edit.md<\/code> global rule must be enabled). The set up details may change as new tools are released, so always refer to the official documentation to <a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/mcp-intro.html\"><u>configure the DX MCP tools<\/u><\/a>.\r\n<h2><b>Convert Figma designs into LWCs<\/b><\/h2>\r\n<span style=\"font-weight: 400\">With our Figma to LWC tool, you can have a working draft of a design in minutes. You copy a link to a component design in Figma and have the LLM generate an LWC. Then, the <\/span><a href=\"https:\/\/www.lightningdesignsystem.com\/\"><span style=\"font-weight: 400\">Salesforce Lightning Design System<\/span><\/a><span style=\"font-weight: 400\"> (SLDS) tools can review the component and CSS stylesheet.<\/span><span style=\"font-weight: 400\"><\/span>\r\n\r\n<span style=\"font-weight: 400\">The LLM needs a link to the design, so in Figma, you right-click and use <\/span><b>Copy link to selection<\/b><span style=\"font-weight: 400\"> to share the portion of the Figma diagram that will be referenced in a prompt.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/image5-1603x1000.png\" alt=\"A screenshot of Figma with a two-level context menu showing \u201cCopy as\u201d and then \u201cCopy link to selection\u201d selected\" width=\"993\" height=\"620\" class=\"alignnone wp-image-205032\" \/>\r\n\r\n<span style=\"font-weight: 400\">Then, in Agentforce Vibes, add the copied Figma link into a prompt like this one:<\/span>\r\n<pre language=\"markdown\">Generate an LWC component from this Figma frame: \r\n<\/pre>\r\n<span style=\"font-weight: 400\">The generated markup is displayed in the Agentforce Vibes UI (see screenshot below), with the pane on the left showing the task completed and a little bit of summary text.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/image3-1603x1000.png\" alt=\"Screenshot of the Agentforce Vibes UI showing the markup generated from the Figma diagram\" width=\"992\" height=\"619\" class=\"alignnone wp-image-205033\" \/>\r\n\r\n<span style=\"font-weight: 400\">Agentforce creates the content and structure from the Figma design. You can go a step further and double-check the styles with another prompt.<\/span>\r\n<pre language=\"markdown\">Make sure this component follows SLDS styling best practices.\r\n<\/pre>\r\n<span style=\"font-weight: 400\">The\u00a0 tool will perform tasks like cleaning up duplicate CSS generated from the Figma design and removing unnecessary comments.\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400\">Many factors can affect the results, such as which tools are enabled, the LLM used, or the inherent randomness of generative AI. Some configurations or LLM models work better than others for a given task, so if something doesn\u2019t work as well as you expect, make sure that the expected tools are being used or try a different model. Always review the generated code carefully to make sure that it meets your standards.<\/span>\r\n<h2><b>Use AI expert advice to enhance your components<\/b><\/h2>\r\n<span style=\"font-weight: 400\">To demonstrate an alternative to Agentforce Vibes, we\u2019ll switch to <\/span><a href=\"https:\/\/cursor.com\/\"><span style=\"font-weight: 400\">Cursor<\/span><\/a><span style=\"font-weight: 400\">, a third-party agentic IDE, with the Salesforce DX MCP Server installed and configured.<\/span>\r\n\r\n<span style=\"font-weight: 400\">Let\u2019s first check the accessibility of a component using this prompt:<\/span>\r\n<pre language=\"markdown\">Fix any accessibility bugs you see in this LWC\r\n<\/pre>\r\n<span style=\"font-weight: 400\">Cursor understands the request, uses tools provided by the DX MCP Server, and updates the component, addressing the accessibility issues it found. The screenshot below shows a completed review in Cursor, displaying a number of changes to the HTML template and the final output from the LLM.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/image1-1603x1000.png\" alt=\"Screenshot of the completed review in Cursor.\" width=\"982\" height=\"613\" class=\"alignnone wp-image-205034\" \/>\r\n\r\n<span style=\"font-weight: 400\">You can also get an LWC security review. Since LLMs can get confused when they try to do too many tasks back-to-back, it\u2019s useful to start a new conversation since, in this case, a security review is a different topic than accessibility.<\/span>\r\n\r\n<b>Tip:<\/b><span style=\"font-weight: 400\"> As a general rule, remember that security spans across all layers (frontend and backend), so you should also check the code of your Apex controllers. You can use the <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/salesforce-code-analyzer\/overview\"><span style=\"font-weight: 400\">Salesforce Code Analyzer<\/span><\/a><span style=\"font-weight: 400\"> MCP tool for this purpose.<\/span>\r\n<pre language=\"markdown\">Review this LWC for security issues and fix any you see.\r\n<\/pre>\r\n<span style=\"font-weight: 400\">Here are some other prompt ideas you might use individually to further improve your components:<\/span>\r\n<pre language=\"markdown\">* I've fixed accessibility and security issues in this component. What else would enhance this component?\r\n* Create a jest test for my component\r\n* Review my component for performance issues\r\n<\/pre>\r\n<h2><b>Convert Aura components to LWCs<\/b><\/h2>\r\n<span style=\"font-weight: 400\">You can also migrate legacy Aura components to modern LWCs. The security and performance benefits are valuable, but without the MCP Server, this migration is a daunting task.\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400\">Here\u2019s the prompt we use to convert an Aura component into a Lightning web component:<\/span>\r\n<pre language=\"markdown\">Convert this Aura component into LWC using the official Aura to LWC migration assistant. Handle all the technical details for me and follow LWC best practices. Once the migration is done, keep the draft blueprint and all associated metadata files. Finally, provide a scorecard on how the conversion went.\r\n<\/pre>\r\n<span style=\"font-weight: 400\">The screenshot below shows four generated files (highlighted in green) with the JS file displayed in the editor. A summary comment at the top outlines the component\u2019s public API and the events it fires.<\/span>\r\n\r\n<img src=\"https:\/\/developer.salesforce.com\/blogs\/wp-content\/uploads\/2025\/10\/image4-1603x1000.png\" alt=\"Screenshot of the Cursor UI showing four generated files and a summary\" width=\"984\" height=\"614\" class=\"alignnone wp-image-205035\" \/>\r\n\r\nThe agent creates HTML, JS, CSS, the <code>js-meta.xml<\/code> file, and a couple of yaml files that help tools describe the component. Since we asked for a conversion scorecard, it scored the results and printed that in the output. Here\u2019s a portion of the analysis:\r\n<pre language=\"markdown\">Conversion scorecard\r\n- Functional parity: 100%\r\n  - Aura event backButtonClick mapped to LWC CustomEvent('back) with identical intent.\r\n  - Visibility and disabled behavior preserved.\r\n  - Label and ariaLabel carried forward with same defaults.\r\n- UI\/SLDS alignment: 100%\r\n  - SLDS classes slds-button, slds-button_neutral, slds-button__icon(_left) used.\r\n  - Icon utility:back preserved with lightning-icon base component.\r\n...\r\n<\/pre>\r\n<span style=\"font-weight: 400\">After you fix any remaining issues, the new component will be ready for deployment.<\/span>\r\n<h2><b>Conclusion<\/b><\/h2>\r\n<span style=\"font-weight: 400\">There are over 20 DX MCP Server tools in just the Aura and LWC toolsets, and more than 60 tools <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_dev.meta\/sfdx_dev\/sfdx_dev_mcp_server.htm#valid-values-toolsets\"><span style=\"font-weight: 400\">across all toolsets<\/span><\/a><span style=\"font-weight: 400\">. And while the DX MCP Server is currently in Beta, the tools we\u2019ve demonstrated in this post are all GA, even though they require configuration to be enabled. The full list of Aura and LWC tools, including non-GA tools, is documented in the <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/mcp-reference.html\"><span style=\"font-weight: 400\">LWC Developer Guide<\/span><\/a><span style=\"font-weight: 400\">.<\/span>\r\n\r\n<span style=\"font-weight: 400\">You now have an expert partner: enterprise-grade tools guiding the LLM with trusted context and, in Agentforce Vibes, secured models provided by Salesforce. Your new partner translates designs into clean code, and helps you build and update components with precision, tackling complex requirements like accessibility. It modernizes your legacy code, delivering results with incredible speed. You'll be the hero as you finish large tasks in hours, not days, with best practices addressed.<\/span>\r\n\r\n<span style=\"font-weight: 400\">Your next great component is just a prompt away. Explore what you can create with these powerful AI tools. We can\u2019t wait to see what you\u2019ll build!<\/span>\r\n<h2><b>Resources<\/b><\/h2>\r\n<ul>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Blog post: <\/span><a href=\"https:\/\/developer.salesforce.com\/blogs\/2025\/10\/unleash-your-innovation-with-agentforce-vibes-vibe-coding-for-the-enterprise\"><span style=\"font-weight: 400\">Unleash Your Innovation with Agentforce Vibes: Vibe Coding for the Enterprise<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Blog post: <\/span><a href=\"https:\/\/developer.salesforce.com\/blogs\/2025\/06\/level-up-your-developer-tools-with-salesforce-dx-mcp\"><span style=\"font-weight: 400\">Level Up Your Developer Tools with Salesforce DX MCP<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Salesforce DX Developer Guide: <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/atlas.en-us.sfdx_dev.meta\/sfdx_dev\/sfdx_dev_mcp_server.htm#sfdx_dev_mcp_configure_orgs_toolsets\"><span style=\"font-weight: 400\">Install and Configure the Salesforce DX MCP Server (Beta)<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">GitHub: <\/span><a href=\"https:\/\/github.com\/salesforcecli\/mcp\"><span style=\"font-weight: 400\">The source code for the salesforcecli\/mcp server<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">GitHub: <\/span><a href=\"http:\/\/github.com\/forcedotcom\/mcp\/issues\"><span style=\"font-weight: 400\">forcedotcom\/mcp Discussion Forum<\/span><\/a><\/li>\r\n \t<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">LWC Developer Guide: <\/span><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/lwc\/guide\/mcp-reference.html\"><span style=\"font-weight: 400\">The full list of LWC and Aura MCP tools<\/span><\/a><\/li>\r\n<\/ul>\r\n<h2><b>About the authors<\/b><\/h2>\r\n<b>Adam Reineke<\/b><span style=\"font-weight: 400\"> is a Senior Software Developer at Salesforce, where he works on the UI Platform team, specifically focused on getting AI to write better Lighting web components and measuring how well the LLMs do at this task. Follow Adam on <\/span><a href=\"https:\/\/www.linkedin.com\/in\/adamtreineke\/\"><span style=\"font-weight: 400\">LinkedIn<\/span><\/a><span style=\"font-weight: 400\">.<\/span>\r\n\r\n<b>Seth Tager<\/b><span style=\"font-weight: 400\"> is a Principal Software Developer at Salesforce. He has worked on Sandbox, Apex, Custom Schema, and AI App Dev, and he\u2019s currently investigating ways to turn documentation into food for LLMs.<\/span>","post_title":"Vibe Code Lightning Web Components with Salesforce DX MCP","post_excerpt":"Build and update components with precision, tackle accessibility requirements, modernize legacy code, and more with Salesforce DX MCP.","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"vibe-code-lightning-web-components-with-salesforce-dx-mcp","to_ping":"","pinged":"","post_modified":"2025-11-05 02:10:55","post_modified_gmt":"2025-11-05 09:10:55","post_content_filtered":"","post_parent":0,"guid":"https:\/\/developer.salesforce.com\/blogs\/?p=205031","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw","featured_image":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20251027103502\/Agent-Codey-V2-7.png?w=1200","link":"https:\/\/developer.salesforce.com\/blogs\/2025\/10\/vibe-code-lightning-web-components-with-salesforce-dx-mcp","podcast_audio":{"audio_url":"","duration":""},"authors":[{"name":"Adam Reineke","image_src":"https:\/\/secure.gravatar.com\/avatar\/5b60b9a87122bd9d954d668f2375a124ed08388998f9823cd2ca5899284c5352?s=24&d=mm&r=g"},{"name":"Seth Tager","image_src":"https:\/\/secure.gravatar.com\/avatar\/e0697db2343dd7f4944b0ee1179d982d165c7b280b7a40d9a355ae48b206c82e?s=24&d=mm&r=g"}]}}],"unstyled_content":"<p>The wait is over! Today, I am happy to share with you the first release of Local Development for the Lightning Platform. Local Development enables you to build, run, and test your Lightning Web Components without deploying your code to your Salesforce org. This will dramatically decrease the time it takes to build apps with LWC.<\/p>\n<p>To jump right in, take a look at the <a href=\"https:\/\/developer.salesforce.com\/tools\/vscode\/articles\/lwc\/localdev\">documentation<\/a> and start using this feature today. Since this is a beta, there will be bugs and missing features &#8211; please let us know if you encounter any problems by opening a <a href=\"https:\/\/github.com\/forcedotcom\/lwc-dev-server-feedback\/issues\">Github Issue.<\/a><\/p>\n<p>Local Development is a plugin for the Salesforce CLI. Eventually, this will ship with the Salesforce CLI out of the box, but for now you will need to install it by running the following command.<\/p>\n<pre>sfdx plugins:install @salesforce\/lwc-dev-server<\/pre>\n<p>Once, the plugin is installed you can run the Local Development Server on your Salesforce project by running the start command. Note that you will want to be authorized into an org before you start the server so you can take advantage of the data proxy features. See the full documentation for details.<\/p>\n<pre>sfdx force:lightning:lwc:start<\/pre>\n<p>There are three main areas where we are aiming to improve developer productivity with Local Development. The first is the ability to render components locally in as close to a real environment as possible. The goal is that if your component works locally, it will work in the org.<\/p>\n<p>When you first start up the Local Development Server you will see a screen that lists all of the components in your project. You can search for components and select the component you want to open.<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191002164903\/image-e1570060156604.png\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<br \/>\nWhen you open a component you will see it render in the browser without deploying to the org. From the component preview page you can even click the blue \u201cView in VS Code\u201d button to quickly open the code for this component. When you make changes to the component, you will see those changes refresh in the browser immediately.<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191002164946\/image-1-e1570060320800.png\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>The second thing we aim to do with Local Development is to make it easier and faster to find and solve errors. Typically with Salesforce development you often won\u2019t find a mistake in your code until you try to deploy to your org \u2014 you will see an error in the console that sometimes can be a little tricky to parse and figure out what caused the error. With Local Development you can immediately see errors in the browser along with details such as the exact error message, the file and line where the error occurred, and a code snippet and stack trace to immediately identify the error. Better yet, you can click the link \u201cGo to source (vscode)\u201d to open the file to the exact line where that error occurred and quickly fix the problem.<\/p>\n<p>It is this easy: see in the image below that I referenced the <code>@wired<\/code> decorator instead of the <code>@wire<\/code> decorator. I can then click the \u201cGo to source\u201d link, fix my typo, save the file, and immediately see the fix take effect.<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191002165232\/image-2-e1570060360352.png\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>The final area we have enabled in Local Development is integration with real org data. Because most of your components involve using some form of Salesforce data it is important to be able to consume that data even when running locally. With Local Development, requests for data using Lightning Data Service or Apex will get proxied to your Salesforce Org and returned in your local components. You can do anything locally that you can do in your org such as create and update records, call apex controllers, and use decorators such as <code>@wire<\/code>.<\/p>\n<p>In order to see the product card show real data, you can hard code the component\u2019s <code>recordId<\/code> property to use a specific record. Then the component will render just as it would in the org. In coming releases, there will be tools in the Local Development Server to set component attributes so that it won\u2019t be necessary to hard code development values when running and debugging locally.<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191002165304\/image-3-e1570060391676.png\" width=\"800\" height=\"293\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<p>\n\t\t\t  <span >\n\t\t\t    <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/20191002165334\/image-4-e1570060488770.png\" width=\"800\" height=\"629\" alt=\"\" \/>\n\t\t\t  <\/span>\n\t\t\t<\/p>\n<h2>Roadmap<\/h2>\n<p>Today with the beta release of Local Development, we are setting the foundation of a super productive UI developer experience for Salesforce developers. However, this isn\u2019t the final stop. We will continue to add enhancements and remove the <a href=\"https:\/\/developer.salesforce.com\/tools\/vscode\/articles\/lwc\/localdev#working-with-modules-and-components\">current limitations<\/a> to make Local Development more similar to running in a Salesforce org. Additionally, there are some tooling enhancements that will make working with components even easier. The following items are on our roadmap:<\/p>\n<ul>\n<li>Integration with Visual Studio Code and Illuminated Cloud to enable running the server and opening components without having to use the CLI directly<\/li>\n<li>Locker Support<\/li>\n<li>Support for all base components<\/li>\n<li>Support for all modules such as <code>@salesforce\/apexContinuation<\/code> and <code>@salesforce\/contentAssetUrl<\/code><\/li>\n<li>Tooling to manipulate component attributes without hard coding values<\/li>\n<li>Debugging directly in Visual Studio Code<\/li>\n<\/ul>\n<p>Please also let us know what you would like to see and any issues you encounter by creating <a href=\"https:\/\/github.com\/forcedotcom\/lwc-dev-server-feedback\/issues\">Github Issues<\/a>. We hope you enjoy Local Development and that it makes your Salesforce development experience even more enjoyable and productive!<\/p>\n","acf":{"canonicalid":"","language":"english","audio_url":"https:\/\/a.sfdcstatic.com\/developer-website\/blog-audio\/192561\/192561.mp3","hash":"b398630e7ddf2ca904220dd50876ddcd","transcription_id":"8635b233-09f7-4620-9c30-69ef2d9aee0c","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>Announcing LWC Local Development Beta - 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\/10\/announcing-lwc-local-development-beta\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Announcing LWC Local Development Beta\" \/>\n<meta property=\"og:description\" content=\"The wait is over! Today, I am happy to share with you the first release of Local Development for the Lightning Platform. Local Development enables you to build, run, and test your Lightning Web Components without deploying your code to your Salesforce org. This will dramatically decrease the time it takes to build apps with [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta\" \/>\n<meta property=\"og:site_name\" content=\"Salesforce Developers Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-03T16:00:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-05T09:21:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.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=\"Nathan Totten\" \/>\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=\"Nathan Totten\" \/>\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\/10\/announcing-lwc-local-development-beta\",\"url\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta\",\"name\":\"Announcing LWC Local Development Beta - Salesforce Developers Blog\",\"isPartOf\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage\"},\"image\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage\"},\"thumbnailUrl\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png\",\"datePublished\":\"2019-10-03T16:00:55+00:00\",\"dateModified\":\"2025-11-05T09:21:31+00:00\",\"author\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/6f4776333413647dde573f47ed851723\"},\"breadcrumb\":{\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage\",\"url\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png\",\"contentUrl\":\"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png\",\"width\":\"200\",\"height\":\"200\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.salesforce.com\/blogs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Announcing LWC Local Development Beta\"}]},{\"@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\/6f4776333413647dde573f47ed851723\",\"name\":\"Nathan Totten\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/image\/24e20393b78eacead011cf12ce3e4730\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/51458585bab8edda955e06cabbe7483eb2974d757492628553086f71a47ee483?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/51458585bab8edda955e06cabbe7483eb2974d757492628553086f71a47ee483?s=96&d=mm&r=g\",\"caption\":\"Nathan Totten\"},\"url\":\"https:\/\/developer.salesforce.com\/blogs\/author\/ntotten\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Announcing LWC Local Development Beta - 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\/10\/announcing-lwc-local-development-beta","og_locale":"en_US","og_type":"article","og_title":"Announcing LWC Local Development Beta","og_description":"The wait is over! Today, I am happy to share with you the first release of Local Development for the Lightning Platform. Local Development enables you to build, run, and test your Lightning Web Components without deploying your code to your Salesforce org. This will dramatically decrease the time it takes to build apps with [&hellip;]","og_url":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta","og_site_name":"Salesforce Developers Blog","article_published_time":"2019-10-03T16:00:55+00:00","article_modified_time":"2025-11-05T09:21:31+00:00","og_image":[{"width":200,"height":200,"url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png","type":"image\/png"}],"author":"Nathan Totten","twitter_card":"summary_large_image","twitter_creator":"@SalesforceDevs","twitter_site":"@SalesforceDevs","twitter_misc":{"Written by":"Nathan Totten","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta","url":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta","name":"Announcing LWC Local Development Beta - Salesforce Developers Blog","isPartOf":{"@id":"https:\/\/developer.salesforce.com\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage"},"image":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage"},"thumbnailUrl":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png","datePublished":"2019-10-03T16:00:55+00:00","dateModified":"2025-11-05T09:21:31+00:00","author":{"@id":"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/6f4776333413647dde573f47ed851723"},"breadcrumb":{"@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#primaryimage","url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png","contentUrl":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png","width":"200","height":"200"},{"@type":"BreadcrumbList","@id":"https:\/\/developer.salesforce.com\/blogs\/2019\/10\/announcing-lwc-local-development-beta#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.salesforce.com\/blogs"},{"@type":"ListItem","position":2,"name":"Announcing LWC Local Development Beta"}]},{"@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\/6f4776333413647dde573f47ed851723","name":"Nathan Totten","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.salesforce.com\/blogs\/#\/schema\/person\/image\/24e20393b78eacead011cf12ce3e4730","url":"https:\/\/secure.gravatar.com\/avatar\/51458585bab8edda955e06cabbe7483eb2974d757492628553086f71a47ee483?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/51458585bab8edda955e06cabbe7483eb2974d757492628553086f71a47ee483?s=96&d=mm&r=g","caption":"Nathan Totten"},"url":"https:\/\/developer.salesforce.com\/blogs\/author\/ntotten"}]}},"jetpack_featured_media_url":"https:\/\/d259t2jj6zp7qm.cloudfront.net\/images\/v1544500043-trailhead_project_quick-start-lightning-web-components_pxnxms.png","authors":[{"name":"Nathan Totten","image_src":"https:\/\/secure.gravatar.com\/avatar\/51458585bab8edda955e06cabbe7483eb2974d757492628553086f71a47ee483?s=24&d=mm&r=g"}],"_links":{"self":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192561","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\/3488"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/comments?post=192561"}],"version-history":[{"count":4,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192561\/revisions"}],"predecessor-version":[{"id":192570,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/posts\/192561\/revisions\/192570"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/media\/189866"}],"wp:attachment":[{"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/media?parent=192561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/categories?post=192561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/tags?post=192561"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/developer.salesforce.com\/blogs\/wp-json\/wp\/v2\/coauthors?post=192561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}