CINXE.COM

Visual Studio: IDE and Code Editor for Software Developers and Teams

<!DOCTYPE html> <html class="avada-html-layout-wide avada-html-header-position-top" lang="en-US" > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--- Fav icon for Edge ----> <script> var newrelic_browser_appID = '926586826'; var newrelic_browser_agent_id = '926586826'; </script> <title> Visual Studio: IDE and Code Editor for Software Developers and Teams</title> <meta name="description" content="Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free." /> <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"/> <link rel="canonical" href="https://visualstudio.microsoft.com" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Visual Studio: IDE and Code Editor for Software Developers and Teams" /> <meta property="og:description" content="Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free." /> <meta property="og:url" content="https://visualstudio.microsoft.com" /> <meta property="og:site_name" content="Visual Studio" /> <meta property="og:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2025/03/vscom-share-image.jpg" /> <meta property="og:image:width" content="800" /> <meta property="og:image:height" content="450" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:description" content="Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free." /> <meta name="twitter:title" content="Visual Studio: IDE and Code Editor for Software Developers and Teams" /> <meta name="twitter:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2025/03/vscom-share-image.jpg" /> <script type="application/ld+json"> {"@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "https://visualstudio.microsoft.com/#website", "url": "https://visualstudio.microsoft.com/", "name": "Visual Studio", "description": "Any Developer, Any App, Any Platform", "potentialAction": { "@type": "SearchAction", "target": "https://visualstudio.microsoft.com/?s={search_term_string}", "query-input": "required name=search_term_string" } }, { "@type": "ImageObject", "@id": "https://visualstudio.microsoft.com#primaryimage", "url": "https://visualstudio.microsoft.com/wp-content/uploads/2025/03/vscom-share-image.jpg", "width": 1200, "height": 628 }, { "@type": "WebPage", "@id": "https://visualstudio.microsoft.com#webpage", "url": "https://visualstudio.microsoft.com", "inLanguage": "en_US", "name": "Visual Studio: IDE and Code Editor for Software Developers and Teams", "isPartOf": { "@id": "http://localhost/#website" }, "primaryImageOfPage": { "@id": "https://visualstudio.microsoft.com '#primaryimage" }, "datePublished": "2019-08-19T15:04:58+00:00", "dateModified": "2025-03-19T15:04:47+00:00", "description": "Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free." } ] } </script><meta name='robots' content='max-image-preview:large' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <link rel="alternate" type="application/rss+xml" title="Visual Studio &raquo; Feed" href="https://visualstudio.microsoft.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Visual Studio &raquo; Comments Feed" href="https://visualstudio.microsoft.com/comments/feed/" /> <link rel="shortcut icon" href="https://visualstudio.microsoft.com/wp-content/uploads/2017/02/Microsoft-favicon.png" type="image/x-icon" /> <!-- Apple Touch Icon --> <link rel="apple-touch-icon" sizes="180x180" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-180.png"> <!-- Android Icon --> <link rel="icon" sizes="192x192" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-120.png"> <!-- MS Edge Icon --> <meta name="msapplication-TileImage" content="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-152.png"> <link rel='stylesheet' id='vscom-swimlane-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-swimlane.css?ver=6.7.2' type='text/css' media='all' /> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <style id='pdfemb-pdf-embedder-viewer-style-inline-css' type='text/css'> .wp-block-pdfemb-pdf-embedder-viewer{max-width:none} </style> <link rel='stylesheet' id='microsoft-uhf-css' href='https://visualstudio.microsoft.com/wp-content/plugins/microsoft-uhf/assets/microsoft-uhf.css?ver=2.3' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-subsup-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/css/vscom-subsup.min.css?ver=1667498184' type='text/css' media='1' /> <link rel='stylesheet' id='ajax-filter-styles-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/css/style.css' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-video-player-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-player.min.css?ver=1667498194' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-feature-hero-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-feature-hero.min.css?ver=1681237298' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-builder-tabs-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-builder-tabs.min.css?ver=1735582150' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-single-box-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-single-box.min.css?ver=1681924015' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-icon-cloud-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-icon-cloud.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-collage-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-collage.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-extension-cards-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-extension-cards.min.css?ver=1740079183' type='text/css' media='all' /> <link rel='stylesheet' id='vscom_video_carousel-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-carousel.min.css?ver=1736452972' type='text/css' media='all' /> <link rel='stylesheet' id='fabric-icons-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fabric-icon-manager//assets/css/vscom-icons.css?ver=1660768558' type='text/css' media='all' /> <link rel='stylesheet' id='fusion-dynamic-css-css' href='https://visualstudio.microsoft.com/wp-content/uploads/fusion-styles/d4ab4399f0e849daef67a35380aff1aa.min.css?ver=3.11.14' type='text/css' media='all' /> <link rel='stylesheet' id='avada-fullwidth-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-fullwidth-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-image-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-image-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-section-separator-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-section-separator-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-min.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-max-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-max.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-tabs-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-title-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-title-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-meta-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-meta-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-layout-colums-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-layout-colums-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-1c.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='avada-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-2c.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='avada-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-2c-max-3c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='avada-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-3c-max-4c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='avada-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-4c-max-5c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='avada-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-5c-max-6c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-min-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-min-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-max-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-sbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-sbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-640.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-shbp-18-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-18.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 282px)' /> <link rel='stylesheet' id='avada-max-shbp-32-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-32.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 268px)' /> <link rel='stylesheet' id='avada-min-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-sh-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 800px)' /> <link rel='stylesheet' id='avada-max-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-640.min.css?ver=7.11.14' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='avada-max-main-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-main.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-max-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-cbp-social-sharing-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp-social-sharing.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-sh-cbp.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-768-max-1024-p.min.css?ver=3.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='fb-max-640-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-640.min.css?ver=3.11.14' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='fb-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-1c.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='fb-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-2c.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='fb-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-2c-max-3c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='fb-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-3c-max-4c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='fb-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-4c-max-5c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='fb-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-5c-max-6c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-child-stylesheet-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/modern-styles.min.css?1741896686' type='text/css' media='all' /> <link rel='stylesheet' id='style-vscom-dist-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/vscom-dist.min.css?1724260366' type='text/css' media='all' /> <link rel='stylesheet' id='style-en-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/en.min.css?1667498184' type='text/css' media='all' /> <meta name="ms.locale_id" content="27308" /> <meta name="ms.locale_slug" content="visual-studio-ide-and-code-editor" /> <script type="text/javascript"> // document.onReady document.addEventListener("DOMContentLoaded", function(event) { var locale_slug = "visual-studio-ide-and-code-editor"; var locale_id = "27308"; }); </script><script type="text/javascript" src="https://visualstudio.microsoft.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-utility-plugin/js/utility.min.js?ver=1675795484" id="vscom_common_js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-icon-cloud.min.js?ver=1670949097" id="vscom-icon-cloud-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-collage.min.js?ver=1670949097" id="vscom-collage-js-js"></script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://visualstudio.microsoft.com/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://visualstudio.microsoft.com/' /> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1; t.src="https://www.clarity.ms/tag/"+i+"?ref=wordpress";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jmjgcz3l72"); </script> <link rel="stylesheet" href="https://www.microsoft.com/onerfstatics/marketingsites-wcus-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/60-6a98d7/c9-be0100/a6-e969ef/43-9f2e7c/82-8b5456/a0-5d3913/84-6d4f33/ae-f1ac0c?ver=2.0&amp;_cf=02242021_3231" type="text/css" media="all" /><meta name="ms.shortidmsdn" content="page-27308" /> <meta name="ms.lang" content="en" /> <meta name="ms.loc" content="US" /> <meta name="Ms.Locale" content="en_US" /> <link rel="alternate" hreflang="cs" href="https://visualstudio.microsoft.com/cs/" /><link rel="alternate" hreflang="de" href="https://visualstudio.microsoft.com/de/" /><link rel="alternate" hreflang="en" href="https://visualstudio.microsoft.com" /><link rel="alternate" hreflang="es" href="https://visualstudio.microsoft.com/es/" /><link rel="alternate" hreflang="fr" href="https://visualstudio.microsoft.com/fr/" /><link rel="alternate" hreflang="it" href="https://visualstudio.microsoft.com/it/" /><link rel="alternate" hreflang="ja" href="https://visualstudio.microsoft.com/ja/" /><link rel="alternate" hreflang="ko" href="https://visualstudio.microsoft.com/ko/" /><link rel="alternate" hreflang="pl" href="https://visualstudio.microsoft.com/pl/" /><link rel="alternate" hreflang="pt-br" href="https://visualstudio.microsoft.com/pt-br/" /><link rel="alternate" hreflang="ru" href="https://visualstudio.microsoft.com/ru/" /><link rel="alternate" hreflang="tr" href="https://visualstudio.microsoft.com/tr/" /><link rel="alternate" hreflang="zh-hans" href="https://visualstudio.microsoft.com/zh-hans/" /><link rel="alternate" hreflang="zh-hant" href="https://visualstudio.microsoft.com/zh-hant/" /><script> var img_placeholder = 'https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/vscom-img-placeholder.png'; </script><style type="text/css" id="css-fb-visibility">@media screen and (max-width: 640px){.fusion-no-small-visibility{display:none !important;}body .sm-text-align-center{text-align:center !important;}body .sm-text-align-left{text-align:left !important;}body .sm-text-align-right{text-align:right !important;}body .sm-flex-align-center{justify-content:center !important;}body .sm-flex-align-flex-start{justify-content:flex-start !important;}body .sm-flex-align-flex-end{justify-content:flex-end !important;}body .sm-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .sm-ml-auto{margin-left:auto !important;}body .sm-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-small{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-small{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 641px) and (max-width: 1084px){.fusion-no-medium-visibility{display:none !important;}body .md-text-align-center{text-align:center !important;}body .md-text-align-left{text-align:left !important;}body .md-text-align-right{text-align:right !important;}body .md-flex-align-center{justify-content:center !important;}body .md-flex-align-flex-start{justify-content:flex-start !important;}body .md-flex-align-flex-end{justify-content:flex-end !important;}body .md-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .md-ml-auto{margin-left:auto !important;}body .md-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-medium{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-medium{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 1085px){.fusion-no-large-visibility{display:none !important;}body .lg-text-align-center{text-align:center !important;}body .lg-text-align-left{text-align:left !important;}body .lg-text-align-right{text-align:right !important;}body .lg-flex-align-center{justify-content:center !important;}body .lg-flex-align-flex-start{justify-content:flex-start !important;}body .lg-flex-align-flex-end{justify-content:flex-end !important;}body .lg-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .lg-ml-auto{margin-left:auto !important;}body .lg-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-large{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-large{ position: sticky; top: var(--awb-sticky-offset,0); }}</style> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute( 'data-useragent', navigator.userAgent ); </script> <style type="text/css" id="fusion-builder-page-css">/* slide text fix */ .vscom-slider--modern-full .vscom-slide-text { background: unset !important; } a.vscom-btn-wire.vscom-wire-black { background: #FFF; } /* hot fix for banner */ .vs-mini-series .vscom-banner-wrapper { justify-content: space-between; } .hero-banner .vs-mini-series .banner-column-middle { margin: 0 40px 0 40px; } .hero-banner .vscom-banner .vscom-banner-wrapper p { padding: 10px 0px; max-width: 600px; } .hero-banner .vscom-banner .vscom-banner-wrapper { flex-wrap: nowrap; } .hero-banner .banner-column, .hero-banner .vscom-banner-wrapper a { flex-shrink: 0; } .hero-banner .banner-column-middle { margin: 0 20px 0 30px; } .hero-banner .banner-column p { margin-top: 6px !important; } .hero-banner .vscom-banner .vscom-banner-wrapper .vscom-banner-link-text { color: var(--clr-black); } .hero-banner .vscom-banner .vscom-banner-wrapper .vscom-banner-link-text:hover, .vscom-banner .vscom-banner-wrapper .vscom-banner-link-text:focus { color: var(--clr-white); } .hero-banner .vscom-banner-wrapper a:hover .vscom-banner-link-text, .hero-banner .vscom-banner-wrapper a:focus .vscom-banner-link-text { color: var(--clr-white); } @media screen and (max-width: 1270px) { .hero-banner .vscom-banner .vscom-banner-wrapper { margin: 0; width: auto; padding: 1.25rem 0; } } @media screen and (max-width: 800px) { .hero-banner .vscom-banner-wrapper a { margin: 0; } .hero-banner .vs-mini-series .banner-column-middle { margin: 10px 0; } } /* End*/ /* Coplilot Hero */ .vscom-home-hero .gradient-bg { height: 70px; margin-top: -200px !important; } .vscom-home-hero .gradient-bg:before { content: ''; position: absolute; background: linear-gradient(0deg, #ECE5F7 26.19%, rgba(236, 229, 247, 0) 109.05%); height: 140px; width: 100vw; bottom: 0; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; } .copilot-hero.vscom-swimlane--dark.fusion-fullwidth { background: #1B1F24 !important; } .copilot-hero .vscom-btn-box p { display: inline-flex; gap: 1rem; margin-top: 32px; flex-wrap: wrap; } .hero-tag { position: relative; font-size: 0.75rem; padding: 0px 2px; background: linear-gradient(119.88deg, #93F5EC 9.11%, #A77BF3 71.81%); border-radius: 2px; color: var(--clr-black); margin-right: 5px; font-weight: var(--fw-bold); line-height: 24px; display: inline-block; top: -2px; } .copilot-hero .vscom-btn-box p { margin-bottom: 0; } .copilot-hero .description-text p { margin-bottom: 1.5rem; } .copilot-hero .hero-box-img { box-shadow: 0 0 30px rgba(193, 142, 241, 0.5); width: 56px; height: 56px; border-radius: 16px; background-color: var(--clr-white); display: flex; justify-content: center; align-items: center; filter: drop-shadow(0px 2.69767px 2.69767px rgba(0, 0, 0, 0.25)) drop-shadow(0px 2.69767px 2.69767px rgba(0, 0, 0, 0.25)) drop-shadow(0px 19.7087px 18.301px rgba(0, 0, 0, 0.09)) drop-shadow(0px 8.4466px 8.4466px rgba(0, 0, 0, 0.0709366)) drop-shadow(0px 4.2233px 4.2233px rgba(0, 0, 0, 0.0596004)) drop-shadow(0px 2.81553px 2.25243px rgba(0, 0, 0, 0.0499982)) drop-shadow(0px 0px 33.7209px rgba(193, 142, 241, 0.5)); -webkit-backdrop-filter: drop-shadow(0px 2.69767px 2.69767px rgba(0, 0, 0, 0.25)) drop-shadow(0px 2.69767px 2.69767px rgba(0, 0, 0, 0.25)) drop-shadow(0px 19.7087px 18.301px rgba(0, 0, 0, 0.09)) drop-shadow(0px 8.4466px 8.4466px rgba(0, 0, 0, 0.0709366)) drop-shadow(0px 4.2233px 4.2233px rgba(0, 0, 0, 0.0596004)) drop-shadow(0px 2.81553px 2.25243px rgba(0, 0, 0, 0.0499982)) drop-shadow(0px 0px 33.7209px rgba(193, 142, 241, 0.5)); } .copilot-hero .hero-box-img img { width: 46px; height: 46px; border-radius: 16px; } .copilot-hero .hero-header .subtitle { margin-top: 0 !important; } #wrapper #main .copilot-hero .subtitle h3 { color: #7252AA; font-weight: var(--fw-bold) !important; font-size: var(--fs-h4) !important; width: fit-content; } #wrapper #main .post-content .copilot-hero h1 { font-weight: var(--fw-semibold); /*background: linear-gradient(119.88deg, #93F5EC 9.11%, #A77BF3 71.81%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; text-fill-color: transparent;*/ color: #7252AA !important; } #wrapper #main .copilot-hero .subtitle h3 { /* background: linear-gradient(119.88deg, #93F5EC 9.11%, #A77BF3 71.81%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; text-fill-color: transparent;*/ font-weight: var(--fw-bold) !important; font-size: var(--fs-h4) !important; width: fit-content; } .copilot-hero .hero-boxes { display: flex; gap: 2rem; } .copilot-hero .hero-box .hero-box-header { font-weight: var(--fw-bold); font-size: var(--fs-h3); margin-bottom: 4px; background: linear-gradient(119.88deg, #93F5EC 9.11%, #A77BF3 71.81%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; text-fill-color: transparent; line-height: 2rem; } .copilot-hero .hero-box .hero-box-text a { font-weight: var(--fw-semibold); font-size: 1rem; margin-bottom: 0; color: #8193B2 !important; text-decoration: underline; } .copilot-hero sup { margin-left: 0.25rem; } .copilot-hero sup a { color: #8193B2; text-decoration: underline; } .copilot-hero .vscom-btn-box .vscom-link-wrapper { padding: 15px 0; } .copilot-hero .vscom-video-player-wrapper, .copilot-hero .vscom-video-player-wrapper video { border-radius: 8px; } .copilot-hero .vscom-video-player-wrapper { filter: drop-shadow(-20px 0px 50px rgba(147, 245, 236, 0.2)) drop-shadow(25px 0px 50px rgba(167, 123, 243, 0.25)); -webkit-backdrop-filter: drop-shadow(-20px 0px 50px rgba(147, 245, 236, 0.2)) drop-shadow(25px 0px 50px rgba(167, 123, 243, 0.25)); border-radius: 8px; } .vscom-slider .vscom-link-wrapper a.text-link { background: transparent !important; color: var(--clr-white) !important; padding: 0 0; } .vscom-slider .vscom-link-wrapper a.text-link .vscom-icon--arrow-right:before { content: "e900" !important; } .copilot-foot-notes.vscom-swimlane--dark .fusion-text, .copilot-foot-notes.vscom-swimlane--dark .fusion-text a, .copilot-foot-notes.vscom-swimlane--dark ol { color: #B1BAC4; font-size: 1rem; } @media screen and (max-width:1084px) { .copilot-hero .fusion-one-half { width: 100% !important; } #main .vscom-slider--modern-full .vscom-slider-slide.copilot-slide { background: url('/wp-content/uploads/2023/02/copilot-carousel-bg-900.webp') !important; } } @media screen and (max-width:600px) { .copilot-hero .vscom-btn-box {} .copilot-hero .hero-boxes { gap: 1rem; } #main .vscom-slider--modern-full .vscom-slider-slide.copilot-slide { background: url('/wp-content/uploads/2023/02/copilot-carousel-bg-500.webp') !important; } } @media screen and (max-width:400px) { .copilot-hero .hero-box .hero-box-header { font-size: 21px; line-height: 24px; margin-bottom: 0; } .copilot-hero .hero-box .hero-box-text { font-size: 14px; line-height: 16px; font-weight: 400; } } /* temporarily inline fix */ #vscode-section .vscom-dropdown-button .vscom-subnav { min-width: 280px; } .vscom-slider--modern-full .bss-next::before, .vscom-slider--modern-full .bss-prev::before { font-size: 24px !important; } /* Hero and minibar section */ p.hero-grid-text { min-height: 92px; } .hero-down-item p { margin-bottom: 3px !important; } .vscom-modernization-home-hero .vscom-hero-subtitle p { font-size: 24px; line-height: 30px; } .vscom-modernization-home-hero { background-size: contain !important; z-index: 1; padding: 0px !important; padding-bottom: 2rem !important; } .vscom-modernization-home-hero:after { content: ""; background: linear-gradient(0deg, #ECE5F7 26.19%, rgba(236, 229, 247, 0) 109.05%); width: 100%; left: 0px; bottom: -12px; position: absolute; z-index: -1; height: 25%; } .code-font span.blue { color: #0000FF; font-family: Consolas, monaco, Lucida Console, monospace; } .vscom-modernization-home-hero .hero-download-row .hero-download-col>.fusion-column-wrapper { display: flex; } .vscom-modernization-home-hero .hero-download-col .fusion-clearfix { display: none; } .vscom-modernization-home-hero .hero-download-col .fusion-imageframe { width: 65px; margin-right: 0.75rem !important; } #wrapper #main .vscom-modernization-home-hero .hero-download-row { position: relative; background-color: var(--clr-violet-dark); margin-bottom: -18rem !important; border-radius: 8px; max-width: 1260px; z-index: 1; } #wrapper #main .vscom-modernization-home-hero .hero-download-row .fusion-column-wrapper { z-index: 2; } .vscom-modernization-home-hero .hero-download-col.large-icon .fusion-imageframe { width: 98px; } .vscom-modernization-home-hero .hero-foot-note p { margin-bottom: 0; } .vscom-modernization-home-hero .hero-foot-note p, .vscom-modernization-home-hero .hero-foot-note i { position: relative; } .vscom-modernization-home-hero .fusion-builder-row-inner .hero-download-col { margin-left: 0 !important; margin-right: 0 !important; } .vscom-modernization-home-hero .downloads-button-wrapper { margin-top: 0; } .vscom-modernization-home-hero .hero-download-row .text-smallest { display: block; margin-bottom: 0; } .vscom-modernization-home-hero .hero-download-row .text-small { margin-bottom: 0; margin-top: 8px; } .vscom-modernization-home-hero .vscom-icon--Info { margin-right: 6px; vertical-align: middle; } .vscom-modernization-home-hero h2 { margin-bottom: 12px; } .vscom-modernization-home-hero .fusion-layout-column.fusion-one-full { max-width: 1324px; margin: 50px auto; } /* GRID LAYOUT separated for readability */ .hero-grid-inner-wrap { display: -ms-grid; display: grid; -ms-grid-columns: 50% 50%; grid-template-columns: [col1] 50% [col2] 50% [col-end]; } .hero-grid-inner-wrap h3+p { margin-top: 0 !important; } .vs-hero-block { display: flex; align-items: center; } .hero-grid-column { display: flex; flex-direction: column; justify-content: space-between; min-height: 100%; z-index: 10; } .hero-grid-item { align-items: stretch; justify-self: stretch; padding: 0 2rem; } .hero-grid-column .hero-bottom { display: flex; flex-direction: column; justify-content: space-between; min-height: 11rem; } .hero-grid-col-1 { -ms-grid-column: 1; grid-column: col1; /* using margin rather than column gap in order to support IE */ margin-right: 16px; } .hero-grid-col-2 { -ms-grid-column: 2; grid-column: col2; /* using margin rather than column gap in order to support IE */ margin-right: 8px; margin-left: 8px; z-index: 9; } .hero-grid-col-3 { -ms-grid-column: 3; grid-column: col3; margin-left: 16px; } .hero-grid-inner-wrap { margin: 5px auto; } .hero-grid-header img { width: 3.75rem; height: auto; } .hero-grid-header i { margin-right: 0.75rem; } .hero-grid-header { padding: 2rem 2rem 0.25rem 2rem; } .hero-grid-product { padding: 0.25rem 2rem; } .hero-grid-product h2 { margin-bottom: 0.25rem; } /* Hero Theme */ .hero-foot-note a, .vscom-modernization-home-hero .hero-foot-note i { color: var(--clr-black) !important; } .vs-hero-block h3 { color: var(--clr-black); } .hero-grid-logos1 { margin-left: 1.5rem; border-left: 1px solid #000; display: inline-flex; align-items: center; min-height: 23px; } .hero-grid-product .hero-grid-logos1 img, .hero-grid-product .hero-grid-logos1 i { margin-left: 1rem; color: var(--clr-black); } .hero-grid-product .hero-grid-logos1 img.windows-img, .hero-grid-product .hero-grid-logos1 i.vscom-icon--WindowsLogo { margin-left: 1.5rem; } .hero-grid-product p { margin-bottom: 0; } .hero-grid-download { padding: 0.5rem 2rem 2rem 2rem; } .hero-grid-download { padding-top: 0.5rem; } .hero-grid-desc { padding: 0.5rem 2rem 1.5rem 2rem; } .hero-grid-info { padding: 1rem 2rem 0.5rem 2rem; } .hero-grid-description, .hero-grid-info { margin-bottom: 0; } .hero-grid-description p, .hero-grid-info p { margin-bottom: 0; } .hero-grid-links-wrapper { display: flex; flex-direction: row; } .hero-grid-links-wrapper .vscom-link-wrapper:first-of-type { margin-right: 1.5rem; } .hero-grid-info { display: flex; flex-direction: column; justify-content: space-between; max-height: 80px; } .hero-grid-info .vscom-link-wrapper { margin-bottom: 1rem; } .hero-grid-info .vscom-hero-boxes-mini { align-self: flex-end; } .hero-grid-image img { width: 100%; height: auto; image-rendering: optimizeSpeed; /* STOP SMOOTHING, GIVE ME SPEED */ image-rendering: -moz-crisp-edges; /* Firefox */ image-rendering: -o-crisp-edges; /* Opera */ image-rendering: -webkit-optimize-contrast; /* Chrome (and eventually Safari) */ image-rendering: pixelated; /* Chrome */ image-rendering: optimize-contrast; /* CSS3 Proposed */ -ms-interpolation-mode: nearest-neighbor; /* IE8+ */ } /* THEME */ .hero-grid-row-1, .hero-grid-row-6 { position: relative; } .hero-grid-inner-wrap .reveal { border-radius: 6px; } .hero-grid-col-1.reveal-1 { background: linear-gradient(195deg, rgb(237, 236, 255) 15%, rgb(220, 212, 246) 70%); } .hero-grid-col-3.reveal-3 { background: linear-gradient(195deg, rgb(245, 239, 252) 15%, rgb(219, 207, 240) 70%); } .hero-grid-col-2.reveal-2 { background: linear-gradient(195deg, rgb(196, 249, 253) 15%, rgb(167, 221, 250) 70%); } .hero-grid-item * { position: relative; } .hero-grid-header .mac-logo { font-size: 1rem; line-height: 1.7rem; vertical-align: top; color: #666; font-weight: 400; } .hero-grid-header i { font-size: 1.25rem; line-height: 2rem; color: #666; margin-right: 0.75rem; } .hero-grid-product { line-height: 1; } .hero-grid-description p { font-size: 1rem; line-height: 1.25; } #wrapper #main .hero-grid-item.hero-grid-product, #wrapper #main .hero-grid-item.hero-grid-product h3, #wrapper #main .hero-grid-item.hero-grid-product h3 * { font-size: 1.8125rem !important; } #wrapper #main .hero-grid-item.hero-grid-info { line-height: 1; } #wrapper #main .hero-grid-item.hero-grid-info .vscom-hero-boxes-mini, #wrapper #main .hero-grid-item.hero-grid-info p, #wrapper #main .hero-grid-item.hero-grid-info .vscom-hero-boxes-mini a { font-size: 0.75rem !important; line-height: 1 !important; } .hero-bottom .vscom-hero-boxes-mini a, .hero-bottom .vscom-link-wrapper a { color: var(--clr-black); } .hero-bottom .vscom-hero-boxes-mini a { font-weight: var(--fw-semibold); } .hero-grid-download { border-radius: 0 0 6px 6px; } .hero-grid-product .hero-grid-logos { margin-right: 0.5rem; border-right: 1px solid var(--clr-black); display: inline-flex; align-items: center; min-height: 23px; } .hero-grid-product .hero-grid-logos img, .hero-grid-product .hero-grid-logos i { margin-right: 0.5rem; color: var(--clr-black); font-size: 0.9rem; } .vscom-modernization-home-hero .note-text-1 { font-weight: var(--fw-semibold); color: var(--clr-white); font-style: italic; } .vscom-modernization-home-hero .note-text-2 { display: block; font-size: 0.75rem; font-weight: var(--fw-light); color: var(--clr-white); } .vscom-modernization-home-hero .text-smallest { font-size: var(--fs-body-8); color: var(--clr-white); } .vscom-modernization-home-hero .hero-download-row .text-small { font-size: var(--fs-body-12); color: var(--clr-white); } .vscom-modernization-home-hero .vscom-link-wrapper .vscom-white-link, .vscom-modernization-home-hero .vscom-link-wrapper .vscom-white-link .vscom-link-text { text-decoration: underline; } .vscom-modernization-home-hero .vscom-icon--Info { color: var(--clr-white); } .vscom-modernization-home-hero .fusion-builder-row-inner .hero-download-col:not(:last-of-type) { border-right: 1px rgba(204, 150, 249, 0.2) solid; } /* Hero responsive */ @media all and (max-width:1500px) { /* .hero-grid-column.hero-grid-col-2 .hero-grid-row-4 .vscom-link-wrapper { margin-bottom: 2.4rem; }*/ .hero-grid-column .hero-bottom { min-height: 13.25rem; } } @media only screen and (max-width:1399px) { .vscom-modernization-home-hero .home-hero-blockquote.fusion-layout-column { width: 400px !important; } .hero-download-col .fusion-column-wrapper { padding: 0 27px 0 27px !important; } } @media screen and (max-width: 1084px) { .hero-grid-inner-wrap .vs-hero-block { display: flex; flex-wrap: wrap; margin-bottom: 15px; } .hero-grid-inner-wrap .hero-grid-col-3 { margin-left: 0; } .hero-grid-inner-wrap { max-width: 30rem; margin: 0 auto; grid-row-gap: 24px; -ms-grid-columns: 1fr; grid-template-columns: 1fr; -ms-grid-rows: auto auto auto auto auto auto auto auto auto auto auto auto auto auto auto auto auto auto; } .hero-grid-col-1, .hero-grid-col-2, .hero-grid-col-3 { margin: 0; } #wrapper #main .vscom-modernization-home-hero .hero-download-row.fusion-layout-column--no-margins>.fusion-column-wrapper>.fusion-builder-row { max-width: 100% !important; } .vscom-modernization-home-hero .home-hero-blockquote.fusion-layout-column { margin-left: 12px !important; width: 360px !important; } .vscom-modernization-home-hero p.hero-blockquote:before { font-size: 50px; left: 12px; } .vscom-modernization-home-hero p.hero-blockquote:after { font-size: 50px; } .vscom-modernization-home-hero .fusion-text.hero-foot-note { text-align: center; } } @media screen and (max-width: 950px) { .vscom-modernization-home-hero::before { background: rgb(25, 25, 25); background: linear-gradient(90deg, rgba(25, 25, 25, 1) 0%, rgba(108, 108, 108, 1) 100%); } #wrapper #main .vscom-modernization-home-hero .hero-download-row.fusion-layout-column--no-margins>.fusion-column-wrapper>.fusion-builder-row { flex-direction: column; align-items: center; } .vscom-modernization-home-hero .fusion-builder-row-inner .hero-download-col .fusion-column-wrapper { width: 338px; margin: 0 auto; } .hero-download-col .fusion-column-wrapper { padding: 0 !important; } .vscom-modernization-home-hero .fusion-builder-row-inner .hero-download-col { border: 0 !important; } .vscom-modernization-home-hero .home-hero-blockquote.fusion-layout-column { margin: 0 auto !important; width: 100% !important; } .vscom-modernization-home-hero .home-hero-blockquote.fusion-layout-column .fusion-column-wrapper { margin: 0 auto; width: 80%; } .vscom-modernization-home-hero p.hero-blockquote:before { left: calc(10% + 8px); top: 10px; } } @media screen and (max-width: 800px) { .hero-grid-inner-wrap { max-width: 25rem; } .vscom-modernization-home-hero .hero-grid-column.hero-grid-col-2 .vs-hero-block { flex-direction: column; align-items: flex-start; } .vscom-modernization-home-hero .hero-grid-column.hero-grid-col-2 h3 { margin-bottom: 10px !important; } .vscom-modernization-home-hero .hero-grid-column.hero-grid-col-2 .hero-grid-logos1 { margin-left: 0; } .vscom-modernization-home-hero .fusion-layout-column.hero-download-row.fusion-layout-column--no-margins { width: 100% !important; margin-left: 0 !important; margin-right: 0 !important; } .vscom-modernization-home-hero p.hero-blockquote:before { font-size: 35px; left: calc(10% + 12px); } .vscom-modernization-home-hero p.hero-blockquote:after { font-size: 35px; bottom: 105px; } } @media screen and (max-width: 400px) { .vscom-modernization-home-hero .home-hero-blockquote.fusion-layout-column .fusion-column-wrapper { width: calc(100% - 24px); } .vscom-modernization-home-hero blockquote p.hero-blockquote { padding: 0 0 0 1rem; } .vscom-modernization-home-hero p.hero-blockquote:before { left: 12px; } } /* End Hero Section */ /* Product Sections */ .vs-home-section .vs-row { max-width: 970px; margin: 0 auto; } .vs-home-section .mac-row { max-width: 980px; margin: 0 auto; } .vs-home-section .code-row { max-width: 930px; margin: 0 auto; } .vs-home-section .fusion-builder-row .fusion-layout-column { margin-left: 0px !important; margin-right: 0px !important; } #main .fullwidth-box.fusion-flex-container.vs-home-section.vs-left-image .fusion-row { max-width: 1720px !important; } .vs-home-section.vs-left-image .fusion_builder_column .fusion-content-layout-column.vs-padding-right .fusion-text { padding-right: 90px !important; } .vs-home-section img { width: 100%; } .vs-home-section .vscom-option-text { text-align: center; } .vs-home-section .fusion-imageframe { bottom: -110px; right: -60px; } .vs-home-section.vs-left-image .fusion-imageframe { right: 0px; } button { cursor: pointer; } #main .fullwidth-box.fusion-flex-container .fusion-row { max-width: 1584px !important; } @media screen and (max-width:1750px) { #main .fullwidth-box.fusion-flex-container.vs-home-section.vs-left-image .fusion-row { max-width: 100% !important; padding: 0 2.5% !important; } #main .fullwidth-box.fusion-flex-container>.fusion-row { max-width: 100% !important; padding: 0 4.5% !important; } } @media screen and (max-width:1600px) { .vs-home-section.vs-left-image .fusion_builder_column.vs-padding-right .fusion-content-layout-column .fusion-text { padding-right: 60px !important; } } @media screen and (max-width:1400px) { .vs-home-section .fusion-builder-row { max-width: 1280px !important; } .vs-home-section.vs-left-image .fusion_builder_column .fusion-content-layout-column .fusion-text { padding-right: 0px !important; } } @media screen and (max-width:1200px) { #main .fullwidth-box.fusion-flex-container.vs-home-section.vs-left-image .fusion-row { max-width: 100% !important; } } @media screen and (max-width:1084px) { #main .fusion-flex-container.vs-home-section { padding: 100px 0px 80px !important; } #main .fusion-flex-container.vs-home-section .fusion-row { padding-left: 40px !important; padding-right: 40px !important; } .vs-home-section .vs-row, .vs-home-section .mac-row, .vs-home-section .code-row { max-width: 100%; } } @media screen and (max-width:1024px) { #main .fusion-flex-container.vs-home-section { background-position: top center !important; } .vs-home-section .fusion-imageframe { bottom: 0px; right: 0px; } } /* End Product Sections */ .hero-foot-note { position: relative; } .vscom-slide-caption { background-size: 310px auto !important; background-position: right bottom !important; } .home-general-slider .vscom-slide-caption span.vscom-tag { border-radius: 4px; } .vscom-slider .bss-pause { bottom: 0.5rem !important; left: calc(50% - 13px) !important; } .home-general-slider .vscom-icon--arrow-right:before { content: url('https://visualstudio.microsoft.com/wp-content/uploads/2022/09/Shape.png') !important; } .home-general-slider .vscom-icon--arrow-left:before { content: url('https://visualstudio.microsoft.com/wp-content/uploads/2022/09/left-shape.png') !important; } @media screen and (max-width: 1084px) { .hero-grid--footer .hero-grid-column.hero-grid-col-1 { margin-bottom: 34px !important; padding-bottom: 24px !important; border-bottom: 0.5px solid rgba(223, 223, 223, 0.2); border-right: none !important; } } @media screen and (max-width: 540px) { .hero-grid--footer .downloads-button-wrapper { display: block !important; } .hero-grid--footer .downloads-button-wrapper a { margin: 0px 0px 20px; /*width: 200px !important;*/ } #main div#vscom-logowall { background-image: none !important; } .vscom-logowall .vscom-swimlane-logos-left:before { display: none !important; } } .vs-mac-block-order { order: 2; } @media screen and (max-width:1710px) { #wrapper #main .vscom-modernization-home-hero .home-hero-header>.fusion-column-wrapper>.fusion-builder-row, .vscom-logowall .fusion-builder-row { max-width: 100% !important; width: 100vw; padding-left: 2.5%; padding-right: 2.5%; } } @media screen and (max-width:1600px) { #wrapper #main .vscom-modernization-home-hero .home-hero-header>.fusion-column-wrapper>.fusion-builder-row { padding-left: 5%; padding-right: 5%; } .vscom-logowall .fusion-builder-row { max-width: 100% !important; padding-left: 5%; padding-right: 5%; } #main .fullwidth-box.fusion-flex-container>.fusion-row { max-width: 100% !important; padding: 0 5% !important; } } /* Responsive */ @media only screen and (max-width: 1200px) { .hero-download-col .fusion-column-wrapper { padding: 0 7px 0 7px !important; } } /* Subscriptions Section */ .vs-subscriptions-section ul { margin: 4px 18px 10px 26px; display: inline-block; } .vscom-left-move.fusion-imageframe { bottom: -40px; left: -60px; } .vs-subscriptions-section a i { display: inline-block; vertical-align: middle; animation: 0.5s ease-in-out; } .vscom-icon--ChromeBackMirrored:before { font-weight: 700; } /* End Subscriptions */ /* footer downloads*/ .hero-grid--footer { padding: 40px 0px; } .hero-grid--footer .hero-grid-row-1, .hero-grid--footer .hero-grid-row-6 { position: relative; } .hero-grid--footer .hero-grid-logos1 { border-left: 1px solid var(--clr-white); } .hero-grid--footer .hero-grid-item *:not(.vscom-subnav) { position: relative; z-index: 1; } .hero-grid--footer .hero-grid-col-1, .hero-grid--footer .hero-grid-col-2 { position: relative; } .hero-grid--footer .downloads-button-wrapper { display: flex; flex-direction: column; gap: 20px; justify-content: center; margin-top: 40px; margin-right: 0; } .hero-grid--footer .downloads-button-wrapper a.vscom-btn-wire.fill-off-white { width: 120px; } .versions-grid-logos { margin-bottom: 15px; display: inline-block; } .vs-downloads-icon img { left: -4px; } .vs-footer-titlebox { display: flex; gap: 10px; align-items: center; } .vs-footer-titlebox .vs-downloads-icon { width: calc(22% - 5px); } .vs-footer-titlebox .fusion-title.title { width: calc(78% - 0px); } .hero-grid--footer .hero-grid-inner-wrap { max-width: 1048px; column-gap: 56px; } .hero-grid--footer .hero-grid-header, .hero-grid--footer .hero-grid-item { padding: 0; } .hero-grid--footer .hero-grid-item { align-items: stretch; justify-self: stretch; } .hero-grid--footer .hero-grid-col-1 { -ms-grid-column: 1; grid-column: col1; /* using margin rather than column gap in order to support IE */ margin: 0; } .hero-grid--footer .hero-grid-col-2 { -ms-grid-column: 2; grid-column: col2; /* using margin rather than column gap in order to support IE */ margin: 0; } .hero-grid--footer .hero-grid-col-3 { -ms-grid-column: 3; grid-column: col3; margin: 0; } .hero-grid--footer .hero-grid-row-1 { -ms-grid-row: 1; grid-row: prod-row; } .hero-grid--footer .hero-grid-row-2 { -ms-grid-row: 2; grid-row: desc-row; } .hero-grid--footer .hero-grid-row-3 { -ms-grid-row: 4; grid-row: info-row; } .hero-grid--footer .hero-grid-row-4 { -ms-grid-row: 5; grid-row: btn-row; } .hero-grid--footer .hero-grid-download .vscom-dropdown-button { width: 100%; } .hero-grid--footer .hero-grid-product p { margin-bottom: 0; } /* THEME */ .hero-grid--footer .vs-hero-block .hero-grid-logos1 * { color: var(--clr-white) !important; } .hero-grid--footer .vs-hero-block .hero-grid-logos1 img { height: 15px; } .hero-grid--footer .vs-hero-block .hero-grid-logos1 i { font-size: 15px; line-height: 1; margin-top: 2px; } .hero-grid--footer .vs-hero-block .hero-grid-logos1 i.vscom-icon--LinuxLogo32 { font-size: 1rem; } .hero-grid--footer .hero-grid-column.hero-grid-col-1 { border-right: 0.5px solid rgba(223, 223, 223, 0.2); } #wrapper #main .hero-grid--footer .hero-grid-item.hero-grid-product, #wrapper #main .hero-grid--footer .hero-grid-item.hero-grid-product h3, #wrapper #main .hero-grid--footer .hero-grid-item.hero-grid-product h3 * { font-size: 1.8125rem; color: var(--clr-white); } @media screen and (max-width: 1084px) { .hero-grid--footer .hero-grid-inner-wrap { max-width: 30rem; margin: 0 auto; -ms-grid-columns: 1fr; grid-template-columns: 1fr; } } @media screen and (max-width: 800px) { .hero-grid--footer .hero-grid-inner-wrap { display: block; } } @media screen and (max-width: 400px) { .hero-grid--footer .hero-grid-column.hero-grid-col-2 .vs-hero-block { flex-direction: column; align-items: flex-start; } .hero-grid--footer .hero-grid-column.hero-grid-col-2 .vs-hero-block .hero-grid-logos1 { margin-top: 10px; margin-left: 0; } } /* responsive fixes */ @media screen and (max-width: 1084px) { #main .vscom-slider--modern-full .vscom-slider-slide.copilot-slide { background: url('/wp-content/uploads/2023/02/copilot-carousel-bg-900.webp') !important; } .fusion-layout-column.fusion_builder_column.fusion-flex-column { margin-bottom: 1rem; } .vscom-slider--modern-devblogs-posts .vscom-slider-slides-wrapper { height: 18rem !important; } .vs-mac-block-order { order: unset; } .vscom-btn-box--center a { margin: auto; } } @media screen and (max-width: 600px) { #main .vscom-slider--modern-full .vscom-slider-slide.copilot-slide { background: url('/wp-content/uploads/2023/02/copilot-carousel-bg-500.webp') !important; } .vscom-slider--modern-devblogs-posts .vscom-slider-slides-wrapper { height: 23rem !important; } } .vscom-tag.vscom-tag-blue { background-color: #28AFEA; } .vscom-tag.vscom-tag-purple { background-color: #C18EF1; } .vscom-tag.vscom-tag-green { background-color: #4DA64D; } @media screen and (max-width: 900px) { .vscom-slider .vscom-tag { display: inline; } } @media screen and (max-width: 1300px) { .vscom-extension-cards-background-wrapper:before { display: none; } } /* Home Form */ .vscom-modal-window-wrapper.home-form { z-index: 1000000; } .vscom-modal-window-wrapper.home-form .vscom-modal-window { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; max-width: 740px; height: 611px; padding: 0; min-width: 0; border-radius: 8px; background: transparent; } .home-form .onboardingform { max-width: 100%; border-radius: 8px; padding: 1.5rem; margin: 0 auto; } div[data-form-block-id] .onFormSubmittedFeedback { border-radius: 8px; } .home-form .vscom-modal-close { position: absolute; background-color: transparent; border: none; right: 10px; top: 15px; } .onboardingform .onboardingform_button { margin-top: 20px; } .onboardingform div[data-editorblocktype="Field-email"], .onboardingform div[data-editorblocktype="Field-dropdown"] { padding: 0 0; margin-right: 0 !important; } .onboardingform p { margin-bottom: 20px !important; } .onboardingform .marketing-field { padding: 1rem 0 0 0 !important; } .onboardingform div[data-editorblocktype="Field-dropdown"] { margin-bottom: 0; } .onboardingform div[data-editorblocktype="SubmitButtonBlock"] p { margin-bottom: 0 !important; } .onboardingform div[data-editorblocktype="Field-email"] label, .onboardingform div[data-editorblocktype="Field-dropdown"] label { position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; } .onboardingform .lp-required { position: relative; top: 28px; } .onboardingform .onboardingform_contentblock .lp-required { top: 0; } .onboardingform h2.page_one_header { font-size: var(--fs-h2) !important; line-height: var(--lh-h2) !important; padding-top: 15px; } @media screen and (max-width: 1099px) { .home-form .onboardingform p { font-size: var(--fs-body-sm) !important; } .vscom-modal-window-wrapper.home-form .vscom-modal-window { height: 509px; } } @media screen and (max-width: 800px) { .home-form .onboardingform { padding: 0; } .home-form .onboardingform p { margin-bottom: 10px !important; } .home-form .onboardingform div[data-container="true"] { padding: 1rem !important; } .home-form .onboardingform h2.page_one_header { padding-top: 0px; } } .hero-bottom-text { display:block; margin-top: 24px; line-height: 26px; } /** CODE BLOCK #1 from editor above slideshow **/ .vscom-slider .vscom-tag { display:inline; } .vscom-slider h3{ padding-top: 20px !important; } .vscom-slider--outer-container .fusion-layout-column { padding: 0 !important; } .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-jump-list { margin-bottom: 2rem; background: #191919; padding: 6px; } @media (min-width: 901px) and (max-width: 1085px) { .vscom-slider--modern-full .vscom-slide-text { margin-right: 0 !important; max-width: unset !important; background: unset !important; } .vscom-slider.vscom-slider--modern-full .vscom-slide-caption { flex: 1 0 100% !important; max-width: 40%; } .vscom-slider.vscom-slider--modern-full .vscom-slide-image { max-width: 60%; } } @media screen and (max-width: 900px) { .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper { background: transparent; } .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper .vscom-slide-text-accent h3, .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper .vscom-slide-text-accent h4, .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper .vscom-slide-text-accent p{ color: #fff; } /* .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper .vscom-slide-text-accent.vscom-slide-number-0 h3, .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-text-accent-wrapper .vscom-slide-text-accent.vscom-slide-number-0 p{ color: #000; }*/ .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-jump-link { border: 1px solid var(--clr-white)!important; } .vscom-slider--outer-container .vscom-slider--modern-full .vscom-slider-jump-link.active { background-color: var(--clr-white)!important; } .vscom-slider--outer-container .vscom-slider--modern-full .bss-next, .vscom-slider--outer-container .vscom-slider--modern-full .bss-prev { top: 50%; background: #191919 } .vscom-slider--outer-container .vscom-slider--modern-full .bss-pause { bottom: 4.0rem!important; } } @media screen and (max-width: 700px){ .vscom-slider--modern-full.vscom-slider .vscom-slider-text-accent-wrapper { padding-bottom: 28rem; } } /** END CODE BLOCK **/ /** CODE BLOCK #2 in editor above footer **/ .hero-grid-col-1 .versions-grid-logos .vscom-icon--LinuxLogo32, .hero-grid-col-2 .versions-grid-logos .vscom-icon--LinuxLogo32, .hero-grid-col-2 .versions-grid-logos .vscom-icon--WindowsLogo { color: #4d4d4d; } /** END CODE BLOCK **/ /* temporary fix */ .vscom-slider--modern-devblogs-posts .vscom-slider-slides-wrapper { height: 17rem !important; } @media screen and (max-width: 800px) { .vscom-slider--modern-devblogs-posts .vscom-slider-slides-wrapper { height: 20rem !important; } } /* end temporary fix */</style><!--- [Begin] WCP Cookie Consent API Implementation for Vscom !--> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <div id="cookie-banner" data-bi-id="Cookie Banner"></div> <script> window.WcpConsent && WcpConsent.init( 'en-us', "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent } }, onConsentChanged ); function onConsentChanged(categoryPreferences) { if ( siteConsent.isConsentRequired === true && siteConsent.getConsent().Analytics === true){ loadAdobeTarget(); // Consent for Clarity window.clarity('consent'); } else if (siteConsent.isConsentRequired === false) { // Consent is not required window.clarity('consent'); } } function loadAdobeTarget(){ var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_config_js; //Executing synchronously. script.async = false; head.appendChild(script); var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_js; //Executing synchronously. script.async = false; head.appendChild(script); } </script> <!--- [End] WCP Cookie Consent API Implementation for Vscom !--> <!-- [Begin] JSLL SHIM script includes --> <link rel="preconnect" href="//js.monitor.azure.com" crossorigin> <link rel="preconnect" href="//browser.events.data.microsoft.com" crossorigin> <script> var adobePageMarket = 'en' var firstPagePath = window.location.pathname.split('/')[1] if (['zh-hans', 'zh-hant', 'fr', 'de', 'it', 'ja', 'ru', 'es', 'cs', 'ko', 'pl', 'pt-br', 'tr'].indexOf(firstPagePath) >= 0) { adobePageMarket = firstPagePath } </script> <script type="text/javascript" src="https://js.monitor.azure.com/scripts/c/ms.jsll-3.min.js"> </script> <script type="text/javascript"> let userConsentDetailsCallback = function() { return siteConsent ? siteConsent.getConsent() : null }; var config = { useDefaultContentName: true, useShortNameForContentBlob: false, autoCapture: { pageView: true, onLoad: true, onUnload: true, lineage: true, click: true, scroll: true, resize: false, lineage: true, jsError: true, addin: true, perf: true }, urlCollectHash: true, urlCollectQuery: true, instrumentationKey: "f194a55d6cb942d9b0e5b604e01b609b-8c663a24-3636-4cc5-a2bf-267a92b4ee4f-7662", coreData: { appId: "VSCOM", market: adobePageMarket }, // Initially set the GPC_DataSharingOptIn flag property in 1DS (One Data Source) to false advancedConfig: { propertyConfiguration: { gpcDataSharingOptIn: false, callback: { userConsentDetails: userConsentDetailsCallback }, }, // This one is not working , so we are setting the value using awa.sku.addTelemetryInitializer((item) down below (line 53) userConsent: false, cookieCfg: { ignoreCookies: ["MSCC"] // new. check the FAQ to confirm which cookie you want to ignore! }, }, callback: { pageName: function() { return document.title } } }; awa.init(config); //awa.config.extensionConfig.SystemPropertiesCollector //config.extensionConfig.SystemPropertiesCollector.userConsented = userConsentDetailsCallback() awa.sku.config.extensionConfig.SystemPropertiesCollector.callback.userConsentDetails = userConsentDetailsCallback awa.sku.config.extensionConfig.SystemPropertiesCollector.userConsented = false; /*awa.sku.addTelemetryInitializer((item) => { item = item || {}; item.ext = item.ext || {}; item.ext.web = item.ext.web || {}; item.ext.web.userConsent = false; item.ext.web. })*/ //tracking the search button expand click // 1DS not tracking the click on html button element even after tagging data-bi attribute document.addEventListener("DOMContentLoaded", function(event) { const element = document.getElementById('search') if (element) { element.addEventListener("click", () => { var overrideValues = { behavior: awa.behavior.SEARCHINITIATE, actionType: "CL", contentTags: { areaName: 'Search_nav', id: 'Nav Search Bar Open ' } }; if (typeof awa === "object" && typeof awa.ct === "object") { awa.ct.captureContentPageAction(overrideValues); } }); } }); </script> <!-- [End] JSLL Shim script includes --> <script> //load newrelic if user has consent if (typeof siteConsent === "object") { if (siteConsent.isConsentRequired === false || siteConsent.getConsent().Analytics === true) { ; window.NREUM || (NREUM = {}); NREUM.init = { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true }, ajax: { deny_list: ["bam.nr-data.net"] } };; NREUM.loader_config = { accountID: "3631496", trustKey: "1551542", agentID: newrelic_browser_agent_id, licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID };; NREUM.info = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net", licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID, sa: 1 };; (() => { var __webpack_modules__ = { 507: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; function detectPolyfillFeatures() { const featureStatus = {}; return checkAndAddFeature("Promise", "PROMISE"), checkAndAddFeature("Array.prototype.includes", "ARRAY_INCLUDES"), checkAndAddFeature("Object.assign", "OBJECT_ASSIGN"), checkAndAddFeature("Object.entries", "OBJECT_ENTRIES"), featureStatus; function checkAndAddFeature(funcString, featName) { try { let func = eval("self." + funcString); - 1 !== func.toString().indexOf("[native code]") ? featureStatus[featName] = Status.NATIVE : featureStatus[featName] = Status.CHANGED } catch { featureStatus[featName] = Status.UNAVAIL } } } __webpack_require__.d(__webpack_exports__, { n: () => detectPolyfillFeatures }); const Status = { UNAVAIL: "NotSupported", NATIVE: "Detected", CHANGED: "Modified" } }, 2687: (e, t, r) => { "use strict"; r.d(t, { Z: () => n }); const n = (0, r(2141).ky)(16) }, 1719: (e, t, r) => { "use strict"; r.d(t, { I: () => n }); var n = 0, i = navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/); i && (n = +i[1]) }, 3524: (e, t, r) => { "use strict"; let n; if (r.d(t, { H: () => i }), r(8438).il) { const e = document.createElement("div"); e.innerHTML = "\x3c!--[if lte IE 6]><div></div><![endif]--\x3e\x3c!--[if lte IE 7]><div></div><![endif]--\x3e\x3c!--[if lte IE 8]><div></div><![endif]--\x3e\x3c!--[if lte IE 9]><div></div><![endif]--\x3e", n = e.getElementsByTagName("div").length } var i; i = 4 === n ? 6 : 3 === n ? 7 : 2 === n ? 8 : 1 === n ? 9 : 0 }, 5970: (e, t, r) => { "use strict"; r.d(t, { P_: () => l, Mt: () => h, C5: () => c, DL: () => b, OP: () => R, Yu: () => m, Dg: () => p, CX: () => u, GE: () => g, sU: () => N }); var n = {}; r.r(n), r.d(n, { agent: () => x, match: () => E, version: () => P }); var i = r(4580); class o { constructor(e, t) { return e && "object" == typeof e ? t && "object" == typeof t ? (Object.assign(this, t), void Object.entries(e).forEach((e => { let [t, r] = e; this[t] = r }))) : console.error("setting a Configurable requires a model to set its initial properties") : console.error("setting a Configurable requires an object as input") } } const a = { beacon: i.ce.beacon, errorBeacon: i.ce.errorBeacon, licenseKey: void 0, applicationID: void 0, sa: void 0, queueTime: void 0, applicationTime: void 0, ttGuid: void 0, user: void 0, account: void 0, product: void 0, extra: void 0, jsAttributes: {}, userAttributes: void 0, atts: void 0, transactionName: void 0, tNamePlain: void 0 }, s = {}; function c(e) { if (!e) throw new Error("All info objects require an agent identifier!"); if (!s[e]) throw new Error(`Info for ${e} was never set`); return s[e] } function u(e, t) { if (!e) throw new Error("All info objects require an agent identifier!"); s[e] = new o(t, a), (0, i.Qy)(e, s[e], "info") } const d = { allow_bfcache: !1, privacy: { cookies_enabled: !0 }, ajax: { deny_list: void 0, enabled: !0 }, distributed_tracing: { enabled: void 0, exclude_newrelic_header: void 0, cors_use_newrelic_header: void 0, cors_use_tracecontext_headers: void 0, allowed_origins: void 0 }, ssl: void 0, obfuscate: void 0, jserrors: { enabled: !0 }, metrics: { enabled: !0 }, page_action: { enabled: !0 }, page_view_event: { enabled: !0 }, page_view_timing: { enabled: !0 }, session_trace: { enabled: !0 }, spa: { enabled: !0 } }, f = {}; function l(e) { if (!e) throw new Error("All configuration objects require an agent identifier!"); if (!f[e]) throw new Error(`Configuration for ${e} was never set`); return f[e] } function p(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); f[e] = new o(t, d), (0, i.Qy)(e, f[e], "config") } function h(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); var r = l(e); if (r) { for (var n = t.split("."), i = 0; i < n.length - 1; i++) if ("object" != typeof(r = r[n[i]])) return; r = r[n[n.length - 1]] } return r } const v = { accountID: void 0, trustKey: void 0, agentID: void 0, licenseKey: void 0, applicationID: void 0, xpid: void 0 }, _ = {}; function b(e) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); if (!_[e]) throw new Error(`LoaderConfig for ${e} was never set`); return _[e] } function g(e, t) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); _[e] = new o(t, v), (0, i.Qy)(e, _[e], "loader_config") } const m = (0, i.mF)().o; var w = r(3524), y = r(9206), x = null, P = null; if (navigator.userAgent) { var O = navigator.userAgent, k = O.match(/Version\/(\S+)\s+Safari/); k && -1 === O.indexOf("Chrome") && -1 === O.indexOf("Chromium") && (x = "Safari", P = k[1]) } function E(e, t) { if (!x) return !1; if (e !== x) return !1; if (!t) return !0; if (!P) return !1; for (var r = P.split("."), n = t.split("."), i = 0; i < n.length; i++) if (n[i] !== r[i]) return !1; return !0 } var S = r(2141), C = r(8438); const T = "NRBA_SESSION_ID"; function A() { if (!C.il) return null; try { let e; return null === (e = window.sessionStorage.getItem(T)) && (e = (0, S.ky)(16), window.sessionStorage.setItem(T, e)), e } catch (e) { return null } } var q = C.ZP?.XMLHttpRequest, I = q && q.prototype; const j = {}; function R(e) { if (!e) throw new Error("All runtime objects require an agent identifier!"); if (!j[e]) throw new Error(`Runtime for ${e} was never set`); return j[e] } function N(e, t) { if (!e) throw new Error("All runtime objects require an agent identifier!"); var r; j[e] = new o(t, (r = e, { customTransaction: void 0, disabled: !1, features: {}, loaderType: void 0, maxBytes: 6 === w.H ? 2e3 : 3e4, offset: (0, y.yf)(), onerror: void 0, origin: "" + C.ZP?.location, ptid: void 0, releaseIds: {}, sessionId: 1 == h(r, "privacy.cookies_enabled") ? A() : null, xhrWrappable: q && I && I.addEventListener && !/CriOS/.test(navigator.userAgent), userAgent: n })), (0, i.Qy)(e, j[e], "runtime") } }, 8873: (e, t, r) => { "use strict"; r.d(t, { q: () => n }); const n = ["1222", "PROD"].filter((e => e)).join(".") }, 1925: (e, t, r) => { "use strict"; r.d(t, { w: () => i }); const n = { agentIdentifier: "" }; class i { constructor(e) { if ("object" != typeof e) return console.error("shared context requires an object as input"); this.sharedContext = {}, Object.assign(this.sharedContext, n), Object.entries(e).forEach((e => { let [t, r] = e; Object.keys(n).includes(t) && (this.sharedContext[t] = r) })) } } }, 2071: (e, t, r) => { "use strict"; r.d(t, { c: () => d, ee: () => c }); var n = r(4580), i = r(9010), o = r(9599), a = "nr@context"; let s = (0, n.fP)(); var c; function u() {} function d(e) { return (0, i.X)(e, a, f) } function f() { return new u } function l() { (c.backlog.api || c.backlog.feature) && (c.aborted = !0, c.backlog = {}) } s.ee ? c = s.ee : (c = function e(t, r) { var n = {}, s = {}, d = {}, p = { on: _, addEventListener: _, removeEventListener: b, emit: v, get: m, listeners: g, context: h, buffer: w, abort: l, aborted: !1, isBuffering: y, debugId: r, backlog: t && t.backlog ? t.backlog : {} }; return p; function h(e) { return e && e instanceof u ? e : e ? (0, i.X)(e, a, f) : f() } function v(e, r, n, i, o) { if (!1 !== o && (o = !0), !c.aborted || i) { t && o && t.emit(e, r, n); for (var a = h(n), u = g(e), d = u.length, f = 0; f < d; f++) u[f].apply(a, r); var l = x()[s[e]]; return l && l.push([p, e, r, a]), a } } function _(e, t) { n[e] = g(e).concat(t) } function b(e, t) { var r = n[e]; if (r) for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1) } function g(e) { return n[e] || [] } function m(t) { return d[t] = d[t] || e(p, t) } function w(e, t) { var r = x(); p.aborted || (0, o.D)(e, (function(e, n) { t = t || "feature", s[n] = t, t in r || (r[t] = []) })) } function y(e) { return !!x()[s[e]] } function x() { return p.backlog } }(void 0, "globalEE"), s.ee = c) }, 3195: (e, t, r) => { "use strict"; r.d(t, { E: () => n, p: () => i }); var n = r(2071).ee.get("handle"); function i(e, t, r, i, o) { o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r)) } }, 4539: (e, t, r) => { "use strict"; r.d(t, { X: () => o }); var n = r(3195); o.on = a; var i = o.handlers = {}; function o(e, t, r, o) { a(o || n.E, i, e, t, r) } function a(e, t, r, i, o) { o || (o = "feature"), e || (e = n.E); var a = t[o] = t[o] || {}; (a[r] = a[r] || []).push([e, i]) } }, 3585: (e, t, r) => { "use strict"; r.d(t, { bP: () => s, iz: () => c, m$: () => a }); var n = r(8438), i = !1; try { var o = Object.defineProperty({}, "passive", { get: function() { i = !0 } }); n.ZP?.addEventListener("testPassive", null, o), n.ZP?.removeEventListener("testPassive", null, o) } catch (e) {} function a(e) { return i ? { passive: !0, capture: !!e } : !!e } function s(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; window.addEventListener(e, t, a(r)) } function c(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; document.addEventListener(e, t, a(r)) } }, 2141: (e, t, r) => { "use strict"; r.d(t, { Ht: () => a, M: () => o, Rl: () => i, ky: () => s }); var n = r(8438); function i() { var e = null, t = 0, r = n.ZP?.crypto || n.ZP?.msCrypto; function i() { return e ? 15 & e[t++] : 16 * Math.random() | 0 } r && r.getRandomValues && (e = r.getRandomValues(new Uint8Array(31))); for (var o, a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", s = "", c = 0; c < a.length; c++) s += "x" === (o = a[c]) ? i().toString(16) : "y" === o ? (o = 3 & i() | 8).toString(16) : o; return s } function o() { return s(16) } function a() { return s(32) } function s(e) { var t = null, r = 0, n = self.crypto || self.msCrypto; n && n.getRandomValues && Uint8Array && (t = n.getRandomValues(new Uint8Array(31))); for (var i = [], o = 0; o < e; o++) i.push(a().toString(16)); return i.join(""); function a() { return t ? 15 & t[r++] : 16 * Math.random() | 0 } } }, 9206: (e, t, r) => { "use strict"; r.d(t, { nb: () => c, os: () => u, yf: () => s, zO: () => a }); var n = r(1209), i = (new Date).getTime(), o = i; function a() { return n.G && performance.now ? Math.round(performance.now()) : (i = Math.max((new Date).getTime(), i)) - o } function s() { return i } function c(e) { o = e } function u() { return o } }, 1209: (e, t, r) => { "use strict"; r.d(t, { G: () => n }); const n = void 0 !== r(8438).ZP?.performance?.timing?.navigationStart }, 745: (e, t, r) => { "use strict"; r.d(t, { s: () => c, v: () => u }); var n = r(7036), i = r(1719), o = r(9206), a = r(1209), s = r(8438); let c = !0; function u(e) { var t = function() { if (i.I && i.I < 9) return; if (a.G) return c = !1, s.ZP?.performance?.timing?.navigationStart }(); t && ((0, n.B)(e, "starttime", t), (0, o.nb)(t)) } }, 7036: (e, t, r) => { "use strict"; r.d(t, { B: () => o, L: () => a }); var n = r(9206), i = {}; function o(e, t, r) { void 0 === r && (r = (0, n.zO)() + (0, n.os)()), i[e] = i[e] || {}, i[e][t] = r } function a(e, t, r, n) { const o = e.sharedContext.agentIdentifier; var a = i[o]?.[r], s = i[o]?.[n]; void 0 !== a && void 0 !== s && e.store("measures", t, { value: s - a }) } }, 7233: (e, t, r) => { "use strict"; r.d(t, { e: () => o }); var n = r(8438), i = {}; function o(e) { if (e in i) return i[e]; if (0 === (e || "").indexOf("data:")) return { protocol: "data" }; let t; var r = n.ZP?.location, o = {}; if (n.il) t = document.createElement("a"), t.href = e; else try { t = new URL(e, r.href) } catch { return o } o.port = t.port; var a = t.href.split("://"); !o.port && a[1] && (o.port = a[1].split("/")[0].split("@").pop().split(":")[1]), o.port && "0" !== o.port || (o.port = "https" === a[0] ? "443" : "80"), o.hostname = t.hostname || r.hostname, o.pathname = t.pathname, o.protocol = a[0], "/" !== o.pathname.charAt(0) && (o.pathname = "/" + o.pathname); var s = !t.protocol || ":" === t.protocol || t.protocol === r.protocol, c = t.hostname === r.hostname && t.port === r.port; return o.sameOrigin = s && (!t.hostname || c), "/" === o.pathname && (i[e] = o), o } }, 8547: (e, t, r) => { "use strict"; r.d(t, { T: () => i }); var n = r(8438); const i = { isFileProtocol: function() { let e = Boolean("file:" === (0, n.lW)()?.location?.protocol); e && (i.supportabilityMetricSent = !0); return e }, supportabilityMetricSent: !1 } }, 9011: (e, t, r) => { "use strict"; r.d(t, { K: () => o }); var n = r(5970); const i = ["ajax", "jserrors", "metrics", "page_action", "page_view_event", "page_view_timing", "session_trace", "spa"]; function o(e) { const t = {}; return i.forEach((r => { t[r] = function(e, t) { return !0 !== (0, n.OP)(t).disabled && !1 !== (0, n.Mt)(t, `${e}.enabled`) }(r, e) })), t } }, 8025: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(2071); class i { constructor(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; this.agentIdentifier = e, this.aggregator = t, this.ee = n.ee.get(e), this.externalFeatures = r, this.blocked = !1 } } }, 9010: (e, t, r) => { "use strict"; r.d(t, { X: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t, r) { if (n.call(e, t)) return e[t]; var i = r(); if (Object.defineProperty && Object.keys) try { return Object.defineProperty(e, t, { value: i, writable: !0, enumerable: !1 }), i } catch (e) {} return e[t] = i, i } }, 8438: (e, t, r) => { "use strict"; r.d(t, { ZP: () => a, il: () => n, lW: () => s, v6: () => i }); const n = Boolean("undefined" != typeof window && window.document), i = Boolean("undefined" != typeof WorkerGlobalScope && self.navigator instanceof WorkerNavigator); let o = (() => { if (n) return window; if (i) { if ("undefined" != typeof globalThis && globalThis instanceof WorkerGlobalScope) return globalThis; if (self instanceof WorkerGlobalScope) return self } throw new Error("New Relic browser agent shutting down due to error: Unable to locate global scope. This is possibly due to code redefining browser global variables like `self` and `window`.") })(); const a = o; function s() { return o } }, 9599: (e, t, r) => { "use strict"; r.d(t, { D: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t) { var r = [], i = "", o = 0; for (i in e) n.call(e, i) && (r[o] = t(i, e[i]), o += 1); return r } }, 248: (e, t, r) => { "use strict"; r.d(t, { $c: () => c, Ng: () => u, RR: () => s }); var n = r(5970), i = r(1925), o = r(8547), a = { regex: /^file:\/\/(.*)/, replacement: "file://OBFUSCATED" }; class s extends i.w { constructor(e) { super(e) } shouldObfuscate() { return c(this.sharedContext.agentIdentifier).length > 0 } obfuscateString(e) { if (!e || "string" != typeof e) return e; for (var t = c(this.sharedContext.agentIdentifier), r = e, n = 0; n < t.length; n++) { var i = t[n].regex, o = t[n].replacement || "*"; r = r.replace(i, o) } return r } } function c(e) { var t = [], r = (0, n.Mt)(e, "obfuscate") || []; return t = t.concat(r), o.T.isFileProtocol() && t.push(a), t } function u(e) { for (var t = !1, r = !1, n = 0; n < e.length; n++) { "regex" in e[n] ? "string" != typeof e[n].regex && e[n].regex.constructor !== RegExp && (console && console.warn && console.warn('An obfuscation replacement rule contains a "regex" value with an invalid type (must be a string or RegExp)'), r = !0) : (console && console.warn && console.warn('An obfuscation replacement rule was detected missing a "regex" value.'), r = !0); var i = e[n].replacement; i && "string" != typeof i && (console && console.warn && console.warn('An obfuscation replacement rule contains a "replacement" value with an invalid type (must be a string)'), t = !0) } return !t && !r } }, 4580: (e, t, r) => { "use strict"; r.d(t, { EZ: () => u, Qy: () => c, ce: () => o, fP: () => a, gG: () => d, mF: () => s }); var n = r(9206), i = r(8438); const o = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net" }; function a() { return i.ZP?.NREUM || (i.ZP.NREUM = {}), void 0 === i.ZP?.newrelic && (i.ZP.newrelic = i.ZP.NREUM), i.ZP.NREUM } function s() { let e = a(); if (!e.o) { var t = self, r = t.XMLHttpRequest; e.o = { ST: setTimeout, SI: t.setImmediate, CT: clearTimeout, XHR: r, REQ: t.Request, EV: t.Event, PR: t.Promise, MO: t.MutationObserver, FETCH: t.fetch } } return e } function c(e, t, r) { let i = a(); const o = i.initializedAgents || {}, s = o[e] || {}; return Object.keys(s).length || (s.initializedAt = { ms: (0, n.zO)(), date: new Date }), i.initializedAgents = { ...o, [e]: { ...s, [r]: t } }, i } function u(e, t) { a()[e] = t } function d() { return function() { let e = a(); const t = e.info || {}; e.info = { beacon: o.beacon, errorBeacon: o.errorBeacon, ...t } }(), function() { let e = a(); const t = e.init || {}; e.init = { ...t } }(), s(), function() { let e = a(); const t = e.loader_config || {}; e.loader_config = { ...t } }(), a() } }, 584: (e, t, r) => { "use strict"; r.d(t, { N: () => i, e: () => o }); var n = r(3585); function i(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return void(0, n.iz)("visibilitychange", r); function r() { if (t) { if ("hidden" != document.visibilityState) return; e() } e(document.visibilityState) } } function o() { return "hidden" === document.visibilityState ? -1 : 1 / 0 } }, 6023: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(8438); function i() { return "function" == typeof n.ZP?.PerformanceObserver } }, 8539: e => { e.exports = function(e, t, r) { t || (t = 0), void 0 === r && (r = e ? e.length : 0); for (var n = -1, i = r - t || 0, o = Array(i < 0 ? 0 : i); ++n < i;) o[n] = e[t + n]; return o } } }, __webpack_module_cache__ = {}, inProgress, dataWebpackPrefix; function __webpack_require__(e) { var t = __webpack_module_cache__[e]; if (void 0 !== t) return t.exports; var r = __webpack_module_cache__[e] = { exports: {} }; return __webpack_modules__[e](r, r.exports, __webpack_require__), r.exports } __webpack_require__.m = __webpack_modules__, __webpack_require__.n = e => { var t = e && e.__esModule ? () => e.default : () => e; return __webpack_require__.d(t, { a: t }), t }, __webpack_require__.d = (e, t) => { for (var r in t) __webpack_require__.o(t, r) && !__webpack_require__.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }) }, __webpack_require__.f = {}, __webpack_require__.e = e => Promise.all(Object.keys(__webpack_require__.f).reduce(((t, r) => (__webpack_require__.f[r](e, t), t)), [])), __webpack_require__.u = e => e + "." + __webpack_require__.h().slice(0, 8) + "-1222.js", __webpack_require__.h = () => "95d4308d836c4fa71ea6", __webpack_require__.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), inProgress = {}, dataWebpackPrefix = "NRBA:", __webpack_require__.l = (e, t, r, n) => { if (inProgress[e]) inProgress[e].push(t); else { var i, o; if (void 0 !== r) for (var a = document.getElementsByTagName("script"), s = 0; s < a.length; s++) { var c = a[s]; if (c.getAttribute("src") == e || c.getAttribute("data-webpack") == dataWebpackPrefix + r) { i = c; break } } i || (o = !0, (i = document.createElement("script")).charset = "utf-8", i.timeout = 120, __webpack_require__.nc && i.setAttribute("nonce", __webpack_require__.nc), i.setAttribute("data-webpack", dataWebpackPrefix + r), i.src = e), inProgress[e] = [t]; var u = (t, r) => { i.onerror = i.onload = null, clearTimeout(d); var n = inProgress[e]; if (delete inProgress[e], i.parentNode && i.parentNode.removeChild(i), n && n.forEach((e => e(r))), t) return t(r) }, d = setTimeout(u.bind(null, void 0, { type: "timeout", target: i }), 12e4); i.onerror = u.bind(null, i.onerror), i.onload = u.bind(null, i.onload), o && document.head.appendChild(i) } }, __webpack_require__.r = e => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, __webpack_require__.p = "https://js-agent.newrelic.com/", (() => { var e = { 450: 0, 566: 0 }; __webpack_require__.f.j = (t, r) => { var n = __webpack_require__.o(e, t) ? e[t] : void 0; if (0 !== n) if (n) r.push(n[2]); else { var i = new Promise(((r, i) => n = e[t] = [r, i])); r.push(n[2] = i); var o = __webpack_require__.p + __webpack_require__.u(t), a = new Error; __webpack_require__.l(o, (r => { if (__webpack_require__.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) { var i = r && ("load" === r.type ? "missing" : r.type), o = r && r.target && r.target.src; a.message = "Loading chunk " + t + " failed.\n(" + i + ": " + o + ")", a.name = "ChunkLoadError", a.type = i, a.request = o, n[1](a) } }), "chunk-" + t, t) } }; var t = (t, r) => { var n, i, [o, a, s] = r, c = 0; if (o.some((t => 0 !== e[t]))) { for (n in a) __webpack_require__.o(a, n) && (__webpack_require__.m[n] = a[n]); if (s) s(__webpack_require__) } for (t && t(r); c < o.length; c++) i = o[c], __webpack_require__.o(e, i) && e[i] && e[i][0](), e[i] = 0 }, r = window.webpackChunkNRBA = window.webpackChunkNRBA || []; r.forEach(t.bind(null, 0)), r.push = t.bind(null, r.push.bind(r)) })(); var __webpack_exports__ = {}; (() => { "use strict"; __webpack_require__.r(__webpack_exports__); var e = __webpack_require__(507), t = __webpack_require__(3585); function r(e) { if (!document || "complete" === document.readyState) return e() || !0 } function n(e) { r(e) || (0, t.bP)("load", e) } function i(e) { r(e) || (0, t.iz)("DOMContentLoaded", e) } var o = __webpack_require__(8438), a = __webpack_require__(2071); let s = 0; function c(e) { (async () => { if (!s++) try { const { aggregator: t } = await __webpack_require__.e(859).then(__webpack_require__.bind(__webpack_require__, 7859)); await t(e) } catch (e) { console.error("Failed to successfully load all aggregators. Aborting...\n", e), a.ee.abort() } })() } var u = __webpack_require__(2687), d = __webpack_require__(3195), f = __webpack_require__(9206), l = __webpack_require__(7036), p = __webpack_require__(745), h = __webpack_require__(8025); class v extends h.W { constructor(e) { super(e), o.il && ((0, p.v)(e), (0, l.B)(e, "firstbyte", (0, f.yf)()), n((() => this.measureWindowLoaded())), i((() => this.measureDomContentLoaded()))) } measureWindowLoaded() { var e = (0, f.zO)(); (0, l.B)(this.agentIdentifier, "onload", e + (0, f.os)()), (0, d.p)("timing", ["load", e], void 0, void 0, this.ee) } measureDomContentLoaded() { (0, l.B)(this.agentIdentifier, "domContent", (0, f.zO)() + (0, f.os)()) } } var _ = __webpack_require__(584), b = __webpack_require__(5970); class g extends h.W { constructor(e) { var r; if (super(e), r = this, this.isEnabled() && o.il) { if (this.pageHiddenTime = (0, _.e)(), this.performanceObserver, this.lcpPerformanceObserver, this.clsPerformanceObserver, this.fiRecorded = !1, "PerformanceObserver" in window && "function" == typeof window.PerformanceObserver) { this.performanceObserver = new PerformanceObserver((function() { return r.perfObserver(...arguments) })); try { this.performanceObserver.observe({ entryTypes: ["paint"] }) } catch (e) {} this.lcpPerformanceObserver = new PerformanceObserver((function() { return r.lcpObserver(...arguments) })); try { this.lcpPerformanceObserver.observe({ entryTypes: ["largest-contentful-paint"] }) } catch (e) {} this.clsPerformanceObserver = new PerformanceObserver((function() { return r.clsObserver(...arguments) })); try { this.clsPerformanceObserver.observe({ type: "layout-shift", buffered: !0 }) } catch (e) {} } this.fiRecorded = !1; ["click", "keydown", "mousedown", "pointerdown", "touchstart"].forEach((e => { (0, t.iz)(e, (function() { return r.captureInteraction(...arguments) })) })), (0, _.N)((() => { this.pageHiddenTime = (0, f.zO)(), (0, d.p)("docHidden", [this.pageHiddenTime], void 0, void 0, this.ee) }), !0), (0, t.bP)("pagehide", (() => (0, d.p)("winPagehide", [(0, f.zO)()], void 0, void 0, this.ee))) } } isEnabled() { return !1 !== (0, b.Mt)(this.agentIdentifier, "page_view_timing.enabled") } perfObserver(e, t) { e.getEntries().forEach((e => { "first-paint" === e.name ? (0, d.p)("timing", ["fp", Math.floor(e.startTime)], void 0, void 0, this.ee) : "first-contentful-paint" === e.name && (0, d.p)("timing", ["fcp", Math.floor(e.startTime)], void 0, void 0, this.ee) })) } lcpObserver(e, t) { var r = e.getEntries(); if (r.length > 0) { var n = r[r.length - 1]; if (this.pageHiddenTime < n.startTime) return; var i = [n], o = this.addConnectionAttributes({}); o && i.push(o), (0, d.p)("lcp", i, void 0, void 0, this.ee) } } clsObserver(e) { e.getEntries().forEach((e => { e.hadRecentInput || (0, d.p)("cls", [e], void 0, void 0, this.ee) })) } addConnectionAttributes(e) { var t = navigator.connection || navigator.mozConnection || navigator.webkitConnection; if (t) return t.type && (e["net-type"] = t.type), t.effectiveType && (e["net-etype"] = t.effectiveType), t.rtt && (e["net-rtt"] = t.rtt), t.downlink && (e["net-dlink"] = t.downlink), e } captureInteraction(e) { if (e instanceof b.Yu.EV && !this.fiRecorded) { var t = Math.round(e.timeStamp), r = { type: e.type }; this.addConnectionAttributes(r), t <= (0, f.zO)() ? r.fid = (0, f.zO)() - t : t > (0, f.os)() && t <= Date.now() ? (t -= (0, f.os)(), r.fid = (0, f.zO)() - t) : t = (0, f.zO)(), this.fiRecorded = !0, (0, d.p)("timing", ["fi", t, r], void 0, void 0, this.ee) } } } var m = __webpack_require__(4539), w = "React", y = "Angular", x = "AngularJS", P = "Backbone", O = "Ember", k = "Vue", E = "Meteor", S = "Zepto", C = "Jquery"; function T() { if (!o.il) return []; var e = []; try { (function() { try { if (window.React || window.ReactDOM || window.ReactRedux) return !0; if (document.querySelector("[data-reactroot], [data-reactid]")) return !0; for (var e = document.querySelectorAll("body > div"), t = 0; t < e.length; t++) if (Object.keys(e[t]).indexOf("_reactRootContainer") >= 0) return !0; return !1 } catch (e) { return !1 } })() && e.push(w), function() { try { return !!window.angular || (!!document.querySelector(".ng-binding, [ng-app], [data-ng-app], [ng-controller], [data-ng-controller], [ng-repeat], [data-ng-repeat]") || !!document.querySelector('script[src*="angular.js"], script[src*="angular.min.js"]')) } catch (e) { return !1 } }() && e.push(x), function() { try { return !!(window.hasOwnProperty("ng") && window.ng.hasOwnProperty("coreTokens") && window.ng.coreTokens.hasOwnProperty("NgZone")) || !!document.querySelectorAll("[ng-version]").length } catch (e) { return !1 } }() && e.push(y), window.Backbone && e.push(P), window.Ember && e.push(O), window.Vue && e.push(k), window.Meteor && e.push(E), window.Zepto && e.push(S), window.jQuery && e.push(C) } catch (e) {} return e } var A = __webpack_require__(8547), q = __webpack_require__(248), I = __webpack_require__(8873); const j = Boolean(o.ZP?.Worker), R = Boolean(o.ZP?.SharedWorker), N = Boolean(o.ZP?.navigator?.serviceWorker); let L, Z, H; class z extends h.W { constructor(e) { var t; let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; super(e), t = this, this.PfFeatStatusEnum = r, this.singleChecks(), this.eachSessionChecks(), (0, m.X)("record-supportability", (function() { return t.recordSupportability(...arguments) }), void 0, this.ee), (0, m.X)("record-custom", (function() { return t.recordCustom(...arguments) }), void 0, this.ee) } recordSupportability(e, t) { var r = ["sm", e, { name: e }, t]; return (0, d.p)("storeMetric", r, null, void 0, this.ee), r } recordCustom(e, t) { var r = ["cm", e, { name: e }, t]; return (0, d.p)("storeEventMetrics", r, null, void 0, this.ee), r } singleChecks() { this.recordSupportability(`Generic/Version/${I.q}/Detected`); const { loaderType: e } = (0, b.OP)(this.agentIdentifier); e && this.recordSupportability(`Generic/LoaderType/${e}/Detected`), o.il && i((() => { T().forEach((e => { this.recordSupportability("Framework/" + e + "/Detected") })) })), A.T.isFileProtocol() && (this.recordSupportability("Generic/FileProtocol/Detected"), A.T.supportabilityMetricSent = !0); const t = (0, q.$c)(this.agentIdentifier); t.length > 0 && this.recordSupportability("Generic/Obfuscate/Detected"), t.length > 0 && !(0, q.Ng)(t) && this.recordSupportability("Generic/Obfuscate/Invalid"), o.il && this.reportPolyfillsNeeded(), function(e) { if (!L) { if (j) { L = Worker; try { o.ZP.Worker = r(L, "Dedicated") } catch (e) { a(e, "Dedicated") } if (R) { Z = SharedWorker; try { o.ZP.SharedWorker = r(Z, "Shared") } catch (e) { a(e, "Shared") } } else n("Shared"); if (N) { H = navigator.serviceWorker.register; try { o.ZP.navigator.serviceWorker.register = (t = H, function() { for (var e = arguments.length, r = new Array(e), n = 0; n < e; n++) r[n] = arguments[n]; return i("Service", r[1]?.type), t.apply(navigator.serviceWorker, r) }) } catch (e) { a(e, "Service") } } else n("Service"); var t; return } n("All") } function r(e, t) { return new Proxy(e, { construct: (e, r) => (i(t, r[1]?.type), new e(...r)) }) } function n(t) { o.v6 || e(`Workers/${t}/Unavailable`) } function i(t, r) { e("module" === r ? `Workers/${t}/Module` : `Workers/${t}/Classic`) } function a(t, r) { e(`Workers/${r}/SM/Unsupported`), console.warn(`NR Agent: Unable to capture ${r} workers.`, t) } }(this.recordSupportability.bind(this)) } reportPolyfillsNeeded() { this.recordSupportability(`Generic/Polyfill/Promise/${this.PfFeatStatusEnum.PROMISE}`), this.recordSupportability(`Generic/Polyfill/ArrayIncludes/${this.PfFeatStatusEnum.ARRAY_INCLUDES}`), this.recordSupportability(`Generic/Polyfill/ObjectAssign/${this.PfFeatStatusEnum.OBJECT_ASSIGN}`), this.recordSupportability(`Generic/Polyfill/ObjectEntries/${this.PfFeatStatusEnum.OBJECT_ENTRIES}`) } eachSessionChecks() { o.il && (0, t.bP)("pageshow", (e => { e.persisted && this.recordCustom("Custom/BFCache/PageRestored") })) } } var M = __webpack_require__(9010), D = __webpack_require__(8539), W = __webpack_require__.n(D), B = __webpack_require__(9599), $ = o.ZP, G = "fetch-", F = G + "body-", U = ["arrayBuffer", "blob", "json", "text", "formData"], X = $.Request, V = $.Response, Y = "prototype", J = "nr@context"; const Q = {}; function K(e) { const t = function(e) { return (e || a.ee).get("fetch") }(e); if (!(X && V && $.fetch)) return t; if (Q[t.debugId]) return t; function r(e, r, n) { var i = e[r]; "function" == typeof i && (e[r] = function() { var e, r = W()(arguments), o = {}; t.emit(n + "before-start", [r], o), o[J] && o[J].dt && (e = o[J].dt); var a = i.apply(this, r); return t.emit(n + "start", [r, e], a), a.then((function(e) { return t.emit(n + "end", [null, e], a), e }), (function(e) { throw t.emit(n + "end", [e], a), e })) }) } return Q[t.debugId] = !0, (0, B.D)(U, (function(e, t) { r(X[Y], t, F), r(V[Y], t, F) })), r($, "fetch", G), t.on(G + "end", (function(e, r) { var n = this; if (r) { var i = r.headers.get("content-length"); null !== i && (n.rxSize = i), t.emit(G + "done", [null, r], n) } else t.emit(G + "done", [e], n) })), t } var ee = "nr@original", te = Object.prototype.hasOwnProperty, re = !1; function ne(e, t) { return e || (e = a.ee), r.inPlace = function(e, t, n, i, o) { n || (n = ""); var a, s, c, u = "-" === n.charAt(0); for (c = 0; c < t.length; c++) ae(a = e[s = t[c]]) || (e[s] = r(a, u ? s + n : n, i, s, o)) }, r.flag = ee, r; function r(t, r, i, o, a) { return ae(t) ? t : (r || (r = ""), nrWrapper[ee] = t, oe(t, nrWrapper, e), nrWrapper); function nrWrapper() { var s, c, u, d; try { c = this, s = W()(arguments), u = "function" == typeof i ? i(s, c) : i || {} } catch (t) { ie([t, "", [s, c, o], u], e) } n(r + "start", [s, c, o], u, a); try { return d = t.apply(c, s) } catch (e) { throw n(r + "err", [s, c, e], u, a), e } finally { n(r + "end", [s, c, d], u, a) } } } function n(r, n, i, o) { if (!re || t) { var a = re; re = !0; try { e.emit(r, n, i, t, o) } catch (t) { ie([t, r, n, i], e) } re = a } } } function ie(e, t) { t || (t = a.ee); try { t.emit("internal-error", e) } catch (e) {} } function oe(e, t, r) { if (Object.defineProperty && Object.keys) try { return Object.keys(e).forEach((function(r) { Object.defineProperty(t, r, { get: function() { return e[r] }, set: function(t) { return e[r] = t, t } }) })), t } catch (e) { ie([e], r) } for (var n in e) te.call(e, n) && (t[n] = e[n]); return t } function ae(e) { return !(e && e instanceof Function && e.apply && !e[ee]) } function se(e, t, r) { var n = e[t]; e[t] = function(e, t) { var r = t(e); return r[ee] = e, oe(e, r, a.ee), r }(n, r) } function ce() { for (var e = arguments.length, t = new Array(e), r = 0; r < e; ++r) t[r] = arguments[r]; return t } const ue = {}; function de(e) { const t = function(e) { return (e || a.ee).get("timer") }(e); if (ue[t.debugId]) return t; ue[t.debugId] = !0; var r = ne(t), n = "setTimeout", i = "setInterval", s = "clearTimeout", c = "-start"; return r.inPlace(o.ZP, [n, "setImmediate"], n + "-"), r.inPlace(o.ZP, [i], i + "-"), r.inPlace(o.ZP, [s, "clearImmediate"], s + "-"), t.on(i + c, (function(e, t, n) { e[0] = r(e[0], "fn-", null, n) })), t.on(n + c, (function(e, t, n) { this.method = n, this.timerDuration = isNaN(e[1]) ? 0 : +e[1], e[0] = r(e[0], "fn-", this, n) })), t } const fe = {}; function le(e) { const t = function(e) { return (e || a.ee).get("raf") }(e); if (fe[t.debugId] || !o.il) return t; fe[t.debugId] = !0; var r = ne(t), n = "equestAnimationFrame"; return r.inPlace(window, ["r" + n, "mozR" + n, "webkitR" + n, "msR" + n], "raf-"), t.on("raf-start", (function(e) { e[0] = r(e[0], "fn-") })), t } const pe = {}; function he(e) { const t = function(e) { return (e || a.ee).get("history") }(e); if (pe[t.debugId] || !o.il) return t; pe[t.debugId] = !0; var r = ne(t), n = window.history && window.history.constructor && window.history.constructor.prototype, i = window.history; return n && n.pushState && n.replaceState && (i = n), r.inPlace(i, ["pushState", "replaceState"], "-"), t } const ve = {}; function _e(e) { const r = function(e) { return (e || a.ee).get("jsonp") }(e); if (ve[r.debugId] || !o.il) return r; ve[r.debugId] = !0; var n = ne(r), i = /[?&](?:callback|cb)=([^&#]+)/, s = /(.*)\.([^.]+)/, c = /^(\w+)(\.|$)(.*)$/, u = ["appendChild", "insertBefore", "replaceChild"]; function d(e, t) { var r = e.match(c), n = r[1], i = r[3]; return i ? d(i, t[n]) : t[n] } return "addEventListener" in window && (Node && Node.prototype && Node.prototype.appendChild ? n.inPlace(Node.prototype, u, "dom-") : (n.inPlace(HTMLElement.prototype, u, "dom-"), n.inPlace(HTMLHeadElement.prototype, u, "dom-"), n.inPlace(HTMLBodyElement.prototype, u, "dom-"))), r.on("dom-start", (function(e) { ! function(e) { if (!e || "string" != typeof e.nodeName || "script" !== e.nodeName.toLowerCase()) return; if ("function" != typeof e.addEventListener) return; var o = (a = e.src, c = a.match(i), c ? c[1] : null); var a, c; if (!o) return; var u = function(e) { var t = e.match(s); if (t && t.length >= 3) return { key: t[2], parent: d(t[1], window) }; return { key: e, parent: window } }(o); if ("function" != typeof u.parent[u.key]) return; var f = {}; function l() { r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } function p() { r.emit("jsonp-error", [], f), r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } n.inPlace(u.parent, [u.key], "cb-", f), e.addEventListener("load", l, (0, t.m$)(!1)), e.addEventListener("error", p, (0, t.m$)(!1)), r.emit("new-jsonp", [e.src], f) }(e[0]) })), r } const be = {}; function ge(e) { const t = function(e) { return (e || a.ee).get("mutation") }(e); if (be[t.debugId] || !o.il) return t; be[t.debugId] = !0; var r = ne(t), n = b.Yu.MO; return n && (window.MutationObserver = function(e) { return this instanceof n ? new n(r(e, "fn-")) : n.apply(this, arguments) }, MutationObserver.prototype = n.prototype), t } const me = {}; function we(e) { const t = function(e) { return (e || a.ee).get("promise") }(e); if (me[t.debugId]) return t; me[t.debugId] = !0; var r = a.c, n = ne(t), i = b.Yu.PR; return i && function() { function e(e) { var r = t.context(), o = n(e, "executor-", r, null, !1), a = new i(o); return t.context(a).getCtx = function() { return r }, a } o.ZP.Promise = e, Object.defineProperty(o.ZP.Promise, "name", { value: "Promise" }), ["all", "race"].forEach((function(e) { var r = i[e]; i[e] = function(n) { var o = !1; (0, B.D)(n, (function(t, r) { Promise.resolve(r).then(s("all" === e), s(!1)) })); var a = r.apply(i, arguments); return i.resolve(a); function s(e) { return function() { t.emit("propagate", [null, !o], a, !1, !1), o = o || !e } } } })), ["resolve", "reject"].forEach((function(e) { var r = i[e]; i[e] = function(e) { var n = r.apply(i, arguments); return e !== n && t.emit("propagate", [e, !0], n, !1, !1), n } })), i.prototype.catch = function(e) { return this.then(null, e) }, Object.assign(i.prototype, { constructor: { value: e } }), (0, B.D)(Object.getOwnPropertyNames(i), (function(t, r) { try { e[r] = i[r] } catch (e) {} })), se(i.prototype, "then", (function(e) { return function() { var i = this, o = ce.apply(this, arguments), a = r(i); a.promise = i, o[0] = n(o[0], "cb-", a, null, !1), o[1] = n(o[1], "cb-", a, null, !1); var s = e.apply(this, o); return a.nextPromise = s, t.emit("propagate", [i, !0], s, !1, !1), s } })), t.on("executor-start", (function(e) { e[0] = n(e[0], "resolve-", this, null, !1), e[1] = n(e[1], "resolve-", this, null, !1) })), t.on("executor-err", (function(e, t, r) { e[1](r) })), t.on("cb-end", (function(e, r, n) { t.emit("propagate", [n, !0], this.nextPromise, !1, !1) })), t.on("propagate", (function(e, r, n) { this.getCtx && !r || (this.getCtx = function() { if (e instanceof Promise) var r = t.context(e); return r && r.getCtx ? r.getCtx() : this }) })), e.toString = function() { return "" + i } }(), t } const ye = {}; function xe(e) { var t = function(e) { return (e || a.ee).get("events") }(e); if (ye[t.debugId]) return t; ye[t.debugId] = !0; var r = ne(t, !0), n = XMLHttpRequest, i = "addEventListener", s = "removeEventListener"; function c(e) { for (var t = e; t && !t.hasOwnProperty(i);) t = Object.getPrototypeOf(t); t && u(t) } function u(e) { r.inPlace(e, [i, s], "-", d) } function d(e, t) { return e[1] } return "getPrototypeOf" in Object ? (o.il && c(document), c(o.ZP), c(n.prototype)) : n.prototype.hasOwnProperty(i) && (u(o.ZP), u(n.prototype)), t.on(i + "-start", (function(e, t) { var n = e[1]; if (null !== n && ("function" == typeof n || "object" == typeof n)) { var i = (0, M.X)(n, "nr@wrapped", (function() { var e = { object: function() { if ("function" != typeof n.handleEvent) return; return n.handleEvent.apply(n, arguments) }, function: n } [typeof n]; return e ? r(e, "fn-", null, e.name || "anonymous") : n })); this.wrapped = e[1] = i } })), t.on(s + "-start", (function(e) { e[1] = this.wrapped || e[1] })), t } const Pe = {}; function Oe(e) { var r = e || a.ee; const n = function(e) { return (e || a.ee).get("xhr") }(r); if (Pe[n.debugId]) return n; Pe[n.debugId] = !0, xe(r); var i = ne(n), s = b.Yu.XHR, c = b.Yu.MO, u = b.Yu.PR, d = b.Yu.SI, f = "readystatechange", l = ["onload", "onerror", "onabort", "onloadstart", "onloadend", "onprogress", "ontimeout"], p = [], h = o.ZP.XMLHttpRequest.listeners, v = o.ZP.XMLHttpRequest = function(e) { var r = new s(e); function i() { try { n.emit("new-xhr", [r], r), r.addEventListener(f, g, (0, t.m$)(!1)) } catch (e) { console.error(e); try { n.emit("internal-error", [e]) } catch (e) {} } } return this.listeners = h ? [...h, i] : [i], this.listeners.forEach((e => e())), r }; function _(e, t) { i.inPlace(t, ["onreadystatechange"], "fn-", P) } function g() { var e = this, t = n.context(e); e.readyState > 3 && !t.resolved && (t.resolved = !0, n.emit("xhr-resolved", [], e)), i.inPlace(e, l, "fn-", P) } if (function(e, t) { for (var r in e) t[r] = e[r] }(s, v), v.prototype = s.prototype, i.inPlace(v.prototype, ["open", "send"], "-xhr-", P), n.on("send-xhr-start", (function(e, t) { _(e, t), function(e) { p.push(e), c && (m ? m.then(x) : d ? d(x) : (w = -w, y.data = w)) }(t) })), n.on("open-xhr-start", _), c) { var m = u && u.resolve(); if (!d && !u) { var w = 1, y = document.createTextNode(w); new c(x).observe(y, { characterData: !0 }) } } else r.on("fn-end", (function(e) { e[0] && e[0].type === f || x() })); function x() { for (var e = 0; e < p.length; e++) _(0, p[e]); p.length && (p = []) } function P(e, t) { return t } return n } function ke(e) { return xe(e) } function Ee(e) { return K(e) } function Se(e) { return he(e) } function Ce(e) { return le(e) } function Te(e) { return de(e) } function Ae(e) { return Oe(e) } var qe, Ie = {}; try { qe = localStorage.getItem("__nr_flags").split(","), console && "function" == typeof console.log && (Ie.console = !0, -1 !== qe.indexOf("dev") && (Ie.dev = !0), -1 !== qe.indexOf("nr_dev") && (Ie.nrDev = !0)) } catch (e) {} function je(e) { try { Ie.console && je(e) } catch (e) {} } Ie.nrDev && a.ee.on("internal-error", (function(e) { je(e.stack) })), Ie.dev && a.ee.on("fn-err", (function(e, t, r) { je(r.stack) })), Ie.dev && (je("NR AGENT IN DEVELOPMENT MODE"), je("flags: " + (0, B.D)(Ie, (function(e, t) { return e })).join(", "))); var Re = "nr@seenError"; class Ne extends h.W { constructor(e) { var t; super(e), t = this, this.skipNext = 0, this.handleErrors = !1, this.origOnerror = o.ZP?.onerror; const r = this, n = (0, b.OP)(this.agentIdentifier); n.features.err = !0, r.ee.on("fn-start", (function(e, t, n) { r.handleErrors && (r.skipNext += 1) })), r.ee.on("fn-err", (function(e, t, n) { r.handleErrors && !n[Re] && ((0, M.X)(n, Re, (function() { return !0 })), this.thrown = !0, Ze(n, void 0, r.ee)) })), r.ee.on("fn-end", (function() { r.handleErrors && !this.thrown && r.skipNext > 0 && (r.skipNext -= 1) })), r.ee.on("internal-error", (e => { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, r.ee) })); const i = o.ZP?.onerror; o.ZP.onerror = function() { return i && i(...arguments), t.onerrorHandler(...arguments), !1 }; try { o.ZP?.addEventListener("unhandledrejection", (e => { const t = new Error(`${e.reason}`); (0, d.p)("err", [t, (0, f.zO)(), !1, { unhandledPromiseRejection: 1 }], void 0, void 0, this.ee) })) } catch (e) {} try { throw new Error } catch (e) { "stack" in e && (Te(this.ee), Ce(this.ee), "addEventListener" in o.ZP && ke(this.ee), n.xhrWrappable && Ae(this.ee), r.handleErrors = !0) } } onerrorHandler(e, t, r, n, i) { try { this.skipNext ? this.skipNext -= 1 : Ze(i || new Le(e, t, r), !0, this.ee) } catch (e) { try { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, this.ee) } catch (e) {} } return "function" == typeof this.origOnerror && this.origOnerror.apply(this, W()(arguments)) } } function Le(e, t, r) { this.message = e || "Uncaught error with no additional information", this.sourceURL = t, this.line = r } function Ze(e, t, r) { var n = t ? null : (0, f.zO)(); (0, d.p)("err", [e, n], void 0, void 0, r) } var He = 1; function ze(e) { var t = typeof e; return !e || "object" !== t && "function" !== t ? -1 : e === o.ZP ? 0 : (0, M.X)(e, "nr@id", (function() { return He++ })) } var Me = __webpack_require__(1719); function De(e) { if ("string" == typeof e && e.length) return e.length; if ("object" == typeof e) { if ("undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength; if ("undefined" != typeof Blob && e instanceof Blob && e.size) return e.size; if (!("undefined" != typeof FormData && e instanceof FormData)) try { return JSON.stringify(e).length } catch (e) { return } } } var We = __webpack_require__(7233), Be = __webpack_require__(2141); class $e { constructor(e) { this.agentIdentifier = e, this.generateTracePayload = this.generateTracePayload.bind(this), this.shouldGenerateTrace = this.shouldGenerateTrace.bind(this) } generateTracePayload(e) { if (!this.shouldGenerateTrace(e)) return null; var t = (0, b.DL)(this.agentIdentifier); if (!t) return null; var r = (t.accountID || "").toString() || null, n = (t.agentID || "").toString() || null, i = (t.trustKey || "").toString() || null; if (!r || !n) return null; var o = (0, Be.M)(), a = (0, Be.Ht)(), s = Date.now(), c = { spanId: o, traceId: a, timestamp: s }; return (e.sameOrigin || this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors()) && (c.traceContextParentHeader = this.generateTraceContextParentHeader(o, a), c.traceContextStateHeader = this.generateTraceContextStateHeader(o, s, r, n, i)), (e.sameOrigin && !this.excludeNewrelicHeader() || !e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors()) && (c.newrelicHeader = this.generateTraceHeader(o, a, s, r, n, i)), c } generateTraceContextParentHeader(e, t) { return "00-" + t + "-" + e + "-01" } generateTraceContextStateHeader(e, t, r, n, i) { return i + "@nr=0-1-" + r + "-" + n + "-" + e + "----" + t } generateTraceHeader(e, t, r, n, i, a) { if (!("function" == typeof o.ZP?.btoa)) return null; var s = { v: [0, 1], d: { ty: "Browser", ac: n, ap: i, id: e, tr: t, ti: r } }; return a && n !== a && (s.d.tk = a), btoa(JSON.stringify(s)) } shouldGenerateTrace(e) { return this.isDtEnabled() && this.isAllowedOrigin(e) } isAllowedOrigin(e) { var t = !1, r = {}; if ((0, b.Mt)(this.agentIdentifier, "distributed_tracing") && (r = (0, b.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) t = !0; else if (r.allowed_origins instanceof Array) for (var n = 0; n < r.allowed_origins.length; n++) { var i = (0, We.e)(r.allowed_origins[n]); if (e.hostname === i.hostname && e.protocol === i.protocol && e.port === i.port) { t = !0; break } } return t } isDtEnabled() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.enabled } excludeNewrelicHeader() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.exclude_newrelic_header } useNewrelicHeaderForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !1 !== e.cors_use_newrelic_header } useTraceContextHeadersForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.cors_use_tracecontext_headers } } var Ge = ["load", "error", "abort", "timeout"], Fe = Ge.length, Ue = b.Yu.REQ, Xe = o.ZP?.XMLHttpRequest; class Ve extends h.W { constructor(e) { super(e); const r = (0, b.OP)(this.agentIdentifier); r.xhrWrappable && !r.disabled && (r.features.xhr = !0, this.dt = new $e(this.agentIdentifier), this.handler = (e, t, r, n) => (0, d.p)(e, t, r, n, this.ee), this.wrappedFetch = Ee(this.ee), Ae(this.ee), function(e, r, n, i) { function a(e) { var r = this; r.totalCbs = 0, r.called = 0, r.cbTime = 0, r.end = P, r.ended = !1, r.xhrGuids = {}, r.lastSize = null, r.loadCaptureCalled = !1, r.params = this.params || {}, r.metrics = this.metrics || {}, e.addEventListener("load", (function(t) { k(r, e) }), (0, t.m$)(!1)), Me.I && (Me.I > 34 || Me.I < 10) || e.addEventListener("progress", (function(e) { r.lastSize = e.loaded }), (0, t.m$)(!1)) } function s(e) { this.params = { method: e[0] }, O(this, e[1]), this.metrics = {} } function c(t, r) { var n = (0, b.DL)(e); "xpid" in n && this.sameOrigin && r.setRequestHeader("X-NewRelic-ID", n.xpid); var o = i.generateTracePayload(this.parsedOrigin); if (o) { var a = !1; o.newrelicHeader && (r.setRequestHeader("newrelic", o.newrelicHeader), a = !0), o.traceContextParentHeader && (r.setRequestHeader("traceparent", o.traceContextParentHeader), o.traceContextStateHeader && r.setRequestHeader("tracestate", o.traceContextStateHeader), a = !0), a && (this.dt = o) } } function u(e, n) { var i = this.metrics, o = e[0], a = this; if (i && o) { var s = De(o); s && (i.txSize = s) } this.startTime = (0, f.zO)(), this.listener = function(e) { try { "abort" !== e.type || a.loadCaptureCalled || (a.params.aborted = !0), ("load" !== e.type || a.called === a.totalCbs && (a.onloadCalled || "function" != typeof n.onload)) && a.end(n) } catch (e) { try { r.emit("internal-error", [e]) } catch (e) {} } }; for (var c = 0; c < Fe; c++) n.addEventListener(Ge[c], this.listener, (0, t.m$)(!1)) } function d(e, t, r) { this.cbTime += e, t ? this.onloadCalled = !0 : this.called += 1, this.called !== this.totalCbs || !this.onloadCalled && "function" == typeof r.onload || this.end(r) } function l(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && !this.xhrGuids[r] && (this.xhrGuids[r] = !0, this.totalCbs += 1) } function p(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], this.totalCbs -= 1) } function h() { this.endTime = (0, f.zO)() } function v(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-added", [e[1], e[2]], t) } function _(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-removed", [e[1], e[2]], t) } function g(e, t, r) { t instanceof Xe && ("onload" === r && (this.onload = !0), ("load" === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, f.zO)())) } function m(e, t) { this.xhrCbStart && r.emit("xhr-cb-time", [(0, f.zO)() - this.xhrCbStart, this.onload, t], t) } function w(e) { var t, r = e[1] || {}; "string" == typeof e[0] ? t = e[0] : e[0] && e[0].url ? t = e[0].url : o.ZP?.URL && e[0] && e[0] instanceof URL && (t = e[0].href), t && (this.parsedOrigin = (0, We.e)(t), this.sameOrigin = this.parsedOrigin.sameOrigin); var n = i.generateTracePayload(this.parsedOrigin); if (n && (n.newrelicHeader || n.traceContextParentHeader)) if ("string" == typeof e[0] || o.ZP?.URL && e[0] && e[0] instanceof URL) { var a = {}; for (var s in r) a[s] = r[s]; a.headers = new Headers(r.headers || {}), c(a.headers, n) && (this.dt = n), e.length > 1 ? e[1] = a : e.push(a) } else e[0] && e[0].headers && c(e[0].headers, n) && (this.dt = n); function c(e, t) { var r = !1; return t.newrelicHeader && (e.set("newrelic", t.newrelicHeader), r = !0), t.traceContextParentHeader && (e.set("traceparent", t.traceContextParentHeader), t.traceContextStateHeader && e.set("tracestate", t.traceContextStateHeader), r = !0), r } } function y(e, t) { this.params = {}, this.metrics = {}, this.startTime = (0, f.zO)(), this.dt = t, e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]); var r, n = this.opts || {}, i = this.target; "string" == typeof i ? r = i : "object" == typeof i && i instanceof Ue ? r = i.url : o.ZP?.URL && "object" == typeof i && i instanceof URL && (r = i.href), O(this, r); var a = ("" + (i && i instanceof Ue && i.method || n.method || "GET")).toUpperCase(); this.params.method = a, this.txSize = De(n.body) || 0 } function x(e, t) { var r; this.endTime = (0, f.zO)(), this.params || (this.params = {}), this.params.status = t ? t.status : 0, "string" == typeof this.rxSize && this.rxSize.length > 0 && (r = +this.rxSize); var i = { txSize: this.txSize, rxSize: r, duration: (0, f.zO)() - this.startTime }; n("xhr", [this.params, i, this.startTime, this.endTime, "fetch"], this) } function P(e) { var t = this.params, r = this.metrics; if (!this.ended) { this.ended = !0; for (var i = 0; i < Fe; i++) e.removeEventListener(Ge[i], this.listener, !1); t.aborted || (r.duration = (0, f.zO)() - this.startTime, this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : k(this, e), r.cbTime = this.cbTime, n("xhr", [t, r, this.startTime, this.endTime, "xhr"], this)) } } function O(e, t) { var r = (0, We.e)(t), n = e.params; n.hostname = r.hostname, n.port = r.port, n.protocol = r.protocol, n.host = r.hostname + ":" + r.port, n.pathname = r.pathname, e.parsedOrigin = r, e.sameOrigin = r.sameOrigin } function k(e, t) { e.params.status = t.status; var r = function(e, t) { var r = e.responseType; return "json" === r && null !== t ? t : "arraybuffer" === r || "blob" === r || "json" === r ? De(e.response) : "text" === r || "" === r || void 0 === r ? De(e.responseText) : void 0 }(t, e.lastSize); if (r && (e.metrics.rxSize = r), e.sameOrigin) { var n = t.getResponseHeader("X-NewRelic-App-Data"); n && (e.params.cat = n.split(", ").pop()) } e.loadCaptureCalled = !0 } r.on("new-xhr", a), r.on("open-xhr-start", s), r.on("open-xhr-end", c), r.on("send-xhr-start", u), r.on("xhr-cb-time", d), r.on("xhr-load-added", l), r.on("xhr-load-removed", p), r.on("xhr-resolved", h), r.on("addEventListener-end", v), r.on("removeEventListener-end", _), r.on("fn-end", m), r.on("fetch-before-start", w), r.on("fetch-start", y), r.on("fn-start", g), r.on("fetch-done", x) }(this.agentIdentifier, this.ee, this.handler, this.dt)) } } var Ye = __webpack_require__(6023), Je = "learResourceTimings", Qe = "addEventListener", Ke = "removeEventListener", et = "resourcetimingbufferfull", tt = "bstResource", rt = "-start", nt = "-end", it = "fn" + rt, ot = "fn" + nt, at = "bstTimer", st = "pushState", ct = b.Yu.EV; class ut extends h.W { constructor(e) { if (super(e), !o.il) return; if (!(window.performance && window.performance.timing && window.performance.getEntriesByType)) return; (0, b.OP)(this.agentIdentifier).features.stn = !0; const r = this.ee; function n(e) { if ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), window.performance["c" + Je]) try { window.performance[Ke](et, n, !1) } catch (e) {} else try { window.performance[Ke]("webkit" + et, n, !1) } catch (e) {} } this.timerEE = Te(this.ee), this.rafEE = Ce(this.ee), Se(this.ee), ke(this.ee), this.ee.on(it, (function(e, t) { e[0] instanceof ct && (this.bstStart = (0, f.zO)()) })), this.ee.on(ot, (function(e, t) { var n = e[0]; n instanceof ct && (0, d.p)("bst", [n, t, this.bstStart, (0, f.zO)()], void 0, void 0, r) })), this.timerEE.on(it, (function(e, t, r) { this.bstStart = (0, f.zO)(), this.bstType = r })), this.timerEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), this.bstType], void 0, void 0, r) })), this.rafEE.on(it, (function() { this.bstStart = (0, f.zO)() })), this.rafEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), "requestAnimationFrame"], void 0, void 0, r) })), this.ee.on(st + rt, (function(e) { this.time = (0, f.zO)(), this.startPath = location.pathname + location.hash })), this.ee.on(st + nt, (function(e) { (0, d.p)("bstHist", [location.pathname + location.hash, this.startPath, this.time], void 0, void 0, r) })), (0, Ye.W)() ? ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), function() { var e = new PerformanceObserver(((e, t) => { var n = e.getEntries(); (0, d.p)(tt, [n], void 0, void 0, r) })); try { e.observe({ entryTypes: ["resource"] }) } catch (e) {} }()) : Qe in window.performance && (window.performance["c" + Je] ? window.performance[Qe](et, n, (0, t.m$)(!1)) : window.performance[Qe]("webkit" + et, n, (0, t.m$)(!1))), document[Qe]("scroll", this.noOp, (0, t.m$)(!1)), document[Qe]("keypress", this.noOp, (0, t.m$)(!1)), document[Qe]("click", this.noOp, (0, t.m$)(!1)) } noOp(e) {} } class dt extends h.W { constructor(e) { super(e); (0, b.OP)(this.agentIdentifier).features.ins = !0 } } var ft = "-start", lt = "-end", pt = "-body", ht = "fn" + ft, vt = "fn" + lt, _t = "cb" + ft, bt = "cb" + lt, gt = "jsTime", mt = "fetch", wt = "addEventListener", yt = o.ZP, xt = yt.location; class Pt extends h.W { constructor(e) { if (super(e), !o.il) return; const r = (0, b.OP)(this.agentIdentifier); if (!yt[wt] || !r.xhrWrappable || r.disabled) return; r.features.spa = !0; let n, i = 0; const a = this.ee.get("tracer"), s = _e(this.ee); const c = function(e) { return we(e) }(this.ee), u = ke(this.ee), d = Te(this.ee), l = Ae(this.ee), p = Ee(this.ee), h = Se(this.ee), v = function(e) { return ge(e) }(this.ee); function _(e, t) { h.emit("newURL", ["" + xt, t]) } function g() { i++, n = xt.hash, this[ht] = (0, f.zO)() } function m() { i--, xt.hash !== n && _(0, !0); var e = (0, f.zO)(); this[gt] = ~~this[gt] + e - this[ht], this[vt] = e } function w(e, t) { e.on(t, (function() { this[t] = (0, f.zO)() })) } this.ee.on(ht, g), c.on(_t, g), s.on(_t, g), this.ee.on(vt, m), c.on(bt, m), s.on(bt, m), this.ee.buffer([ht, vt, "xhr-resolved"]), u.buffer([ht]), d.buffer(["setTimeout" + lt, "clearTimeout" + ft, ht]), l.buffer([ht, "new-xhr", "send-xhr" + ft]), p.buffer([mt + ft, mt + "-done", mt + pt + ft, mt + pt + lt]), h.buffer(["newURL"]), v.buffer([ht]), c.buffer(["propagate", _t, bt, "executor-err", "resolve" + ft]), a.buffer([ht, "no-" + ht]), s.buffer(["new-jsonp", "cb-start", "jsonp-error", "jsonp-end"]), w(p, mt + ft), w(p, mt + "-done"), w(s, "new-jsonp"), w(s, "jsonp-end"), w(s, "cb-start"), h.on("pushState-end", _), h.on("replaceState-end", _), yt[wt]("hashchange", _, (0, t.m$)(!0)), yt[wt]("load", _, (0, t.m$)(!0)), yt[wt]("popstate", (function() { _(0, i > 1) }), (0, t.m$)(!0)) } } var Ot = __webpack_require__(9011), kt = __webpack_require__(4580); let Et = !1; const St = (0, e.n)(); try { ! function(e) { if (Et) return; const t = (0, kt.gG)(); o.v6 && (t.info.jsAttributes = { ...t.info.jsAttributes, isWorker: !0 }); try { (0, b.CX)(u.Z, t.info), (0, b.Dg)(u.Z, t.init), (0, b.GE)(u.Z, t.loader_config), (0, b.sU)(u.Z, { loaderType: e }), function(e) { var t = (0, kt.fP)(), r = a.ee.get(e), n = r.get("tracer"), i = "api-", o = i + "ixn-"; function s() {}(0, B.D)(["setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"], (function(e, r) { t[r] = u(i, r, !0, "api") })), t.addPageAction = u(i, "addPageAction", !0), t.setCurrentRouteName = u(i, "routeName", !0), t.setPageViewName = function(t, r) { if ("string" == typeof t) return "/" !== t.charAt(0) && (t = "/" + t), (0, b.OP)(e).customTransaction = (r || "http://custom.transaction") + t, u(i, "setPageViewName", !0, "api")() }, t.setCustomAttribute = function(t, r) { const n = (0, b.C5)(e); return (0, b.CX)(e, { ...n, jsAttributes: { ...n.jsAttributes, [t]: r } }), u(i, "setCustomAttribute", !0, "api")() }, t.interaction = function() { return (new s).get() }; var c = s.prototype = { createTracer: function(e, t) { var i = {}, a = this, s = "function" == typeof t; return (0, d.p)(o + "tracer", [(0, f.zO)(), e, i], a, void 0, r), function() { if (n.emit((s ? "" : "no-") + "fn-start", [(0, f.zO)(), a, s], i), s) try { return t.apply(this, arguments) } catch (e) { throw n.emit("fn-err", [arguments, this, "string" == typeof e ? new Error(e) : e], i), e } finally { n.emit("fn-end", [(0, f.zO)()], i) } } } }; function u(e, t, n, i) { return function() { return (0, d.p)("record-supportability", ["API/" + t + "/called"], void 0, void 0, r), (0, d.p)(e + t, [(0, f.zO)()].concat(W()(arguments)), n ? null : this, i, r), n ? void 0 : this } }(0, B.D)("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), (function(e, t) { c[t] = u(o, t) })), t.noticeError = function(e, t) { "string" == typeof e && (e = new Error(e)), (0, d.p)("record-supportability", ["API/noticeError/called"], void 0, void 0, r), (0, d.p)("err", [e, (0, f.zO)(), !1, t], void 0, void 0, r) } }(u.Z), Et = !0 } catch (e) {} }("spa"); const e = (0, Ot.K)(u.Z); e.page_view_event && new v(u.Z), e.page_view_timing && new g(u.Z), e.metrics && new z(u.Z, St), e.jserrors && new Ne(u.Z), e.ajax && new Ve(u.Z), e.session_trace && new ut(u.Z), e.page_action && new dt(u.Z), e.spa && new Pt(u.Z), function(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1e3; t ? setTimeout((() => c(e)), r) : o.il ? n((() => c(e))) : c(e) }("spa") } catch (e) { o.ZP?.newrelic?.ee?.abort && o.ZP.newrelic.ee.abort() } })(), window.NRBA = __webpack_exports__ })(); } } </script> <script type="text/javascript"> var vscom_browser_redirect_params = {"pageLanguage":"en","languageUrls":{"en_US":"https:\/\/visualstudio.microsoft.com","en":"https:\/\/visualstudio.microsoft.com","US":"https:\/\/visualstudio.microsoft.com","zh_CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/","zh-hans":"https:\/\/visualstudio.microsoft.com\/zh-hans\/","CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/","zh_TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/","zh-hant":"https:\/\/visualstudio.microsoft.com\/zh-hant\/","TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/","fr_FR":"https:\/\/visualstudio.microsoft.com\/fr\/","fr":"https:\/\/visualstudio.microsoft.com\/fr\/","FR":"https:\/\/visualstudio.microsoft.com\/fr\/","de_DE":"https:\/\/visualstudio.microsoft.com\/de\/","de":"https:\/\/visualstudio.microsoft.com\/de\/","DE":"https:\/\/visualstudio.microsoft.com\/de\/","it_IT":"https:\/\/visualstudio.microsoft.com\/it\/","it":"https:\/\/visualstudio.microsoft.com\/it\/","IT":"https:\/\/visualstudio.microsoft.com\/it\/","ja_JP":"https:\/\/visualstudio.microsoft.com\/ja\/","ja":"https:\/\/visualstudio.microsoft.com\/ja\/","JP":"https:\/\/visualstudio.microsoft.com\/ja\/","ru_RU":"https:\/\/visualstudio.microsoft.com\/ru\/","ru":"https:\/\/visualstudio.microsoft.com\/ru\/","RU":"https:\/\/visualstudio.microsoft.com\/ru\/","es_ES":"https:\/\/visualstudio.microsoft.com\/es\/","es":"https:\/\/visualstudio.microsoft.com\/es\/","ES":"https:\/\/visualstudio.microsoft.com\/es\/","cs_CZ":"https:\/\/visualstudio.microsoft.com\/cs\/","cs":"https:\/\/visualstudio.microsoft.com\/cs\/","CZ":"https:\/\/visualstudio.microsoft.com\/cs\/","ko_KR":"https:\/\/visualstudio.microsoft.com\/ko\/","ko":"https:\/\/visualstudio.microsoft.com\/ko\/","KR":"https:\/\/visualstudio.microsoft.com\/ko\/","pl_PL":"https:\/\/visualstudio.microsoft.com\/pl\/","pl":"https:\/\/visualstudio.microsoft.com\/pl\/","PL":"https:\/\/visualstudio.microsoft.com\/pl\/","pt_BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/","pt-br":"https:\/\/visualstudio.microsoft.com\/pt-br\/","BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/","tr_TR":"https:\/\/visualstudio.microsoft.com\/tr\/","tr":"https:\/\/visualstudio.microsoft.com\/tr\/","TR":"https:\/\/visualstudio.microsoft.com\/tr\/"},"cookie":{"name":"_icl_visitor_lang_js","domain":"visualstudio.microsoft.com","path":"\/","expiration":720},"is404":false,"urlLocale":""}; var VScomMLBrowserRedirect=function(vscom_browser_redirect_params){"use strict";var self=this,vscom_browser_redirect_params=vscom_browser_redirect_params||window.vscom_browser_redirect_params;self.vscom_browser_redirect_params=vscom_browser_redirect_params,self.init=function(){var redirectUrl,browserLanguages;if(self.is404())self.status="404";else if(!vscom_browser_redirect_params.urlLocale){var cookieLanguage=self.readCookie(vscom_browser_redirect_params.cookie.name);if(cookieLanguage)return redirectUrl=self.redirectIfNeeded(cookieLanguage),void(self.status="cookie");browserLanguages=self.getBrowserLanguage(),redirectUrl=self.lookUpRedirectParams(browserLanguages),self.status="new";var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase();void 0===redirectUrl||!1===redirectUrl.url||!1!==navigator.cookieEnabled||redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]?void 0!==redirectUrl&&!1!==redirectUrl.url&&redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]&&(self.status="redirect",self.redirectWithQueryString(redirectUrl.url)):self.status="no cookies"}},self.lookUpRedirectParams=function(browserLanguages){for(var redirectUrl,browserLanguagesLength=browserLanguages.length,pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),i=0;i<browserLanguagesLength;i++){var browserLanguage=browserLanguages[i];if(pageLanguage===browserLanguage)break;if(!1!==(redirectUrl=self.mapBrowserToVSCOMLang(browserLanguage)).url)break}return redirectUrl},self.getRedirectUrl=function(browserLanguage){if(!1===browserLanguage)return{url:!1,language:!1};var redirectUrl=!1,redirectLanguage=!1,languageUrls=vscom_browser_redirect_params.languageUrls,languageFirstPart=browserLanguage.substr(0,2),languageLastPart=browserLanguage.substr(3,2);return void 0===languageUrls[browserLanguage]?void 0!==languageUrls[languageFirstPart]?(redirectUrl=languageUrls[languageFirstPart],redirectLanguage=languageFirstPart):void 0!==languageUrls[languageLastPart]&&(redirectUrl=languageUrls[languageLastPart],redirectLanguage=languageLastPart):(redirectUrl=languageUrls[browserLanguage],redirectLanguage=browserLanguage),{url:redirectUrl,language:redirectLanguage}},self.is404=function(){return vscom_browser_redirect_params.is404},self.mapBrowserToVSCOMLang=function(browserLanguage){var redirectUrl;return browserLanguage=self.maybeCovertChinese(browserLanguage),redirectUrl=self.getRedirectUrl(browserLanguage)},self.redirectIfNeeded=function(language){var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),languageUrls=vscom_browser_redirect_params.languageUrls,redirectUrl;return pageLanguage!==(language=self.maybeCovertChinese(language))&&language.substr(0,2)!==pageLanguage&&languageUrls[language]!==languageUrls[pageLanguage]&&!1!==(redirectUrl=self.getRedirectUrl(language)).url&&self.redirectWithQueryString(redirectUrl.url),redirectUrl},self.maybeCovertChinese=function(language){var simpleChinese=["hans","cn","CN"];return"zh"===language.substr(0,2)&&-1===simpleChinese.indexOf(language.substr(3,4))&&language.length>3||"TW"==language?language="zh-hant":("zh"==language||"zh"===language.substr(0,2)&&simpleChinese.indexOf(language.substr(3,4))>=0||"CN"==language)&&(language="zh-hans"),language},self.redirectWithQueryString=function(redirectTo){""===window.location.search||redirectTo.includes("?")||(redirectTo+=window.location.search),window.location=redirectTo},self.getExpirationDate=function(){var date=new Date,currentTime=date.getTime();return date.setTime(currentTime+60*vscom_browser_redirect_params.cookie.expiration*60*1e3),date},self.readCookie=function(a){var b=document.cookie.match("(^|;)\\s*"+a+"\\s*=\\s*([^;]+)");return b?b.pop():""},self.setCookie=function(browserLanguage){var cookieParams=vscom_browser_redirect_params.cookie,cookieName=cookieParams.name,path="/";cookieParams.path&&(path=cookieParams.path),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"language-picker",label:browserLanguage}),document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"="+browserLanguage+"; expires="+self.getExpirationDate().toGMTString()+"; path="+path},self.getBrowserLanguage=function(){var browserLanguages=[];return navigator.languages&&(browserLanguages=navigator.languages),0===browserLanguages.length&&(navigator.language||navigator.userLanguage)&&browserLanguages.push(navigator.language||navigator.userLanguage),0===browserLanguages.length&&(navigator.browserLanguage||navigator.systemLanguage)&&browserLanguages.push(navigator.browserLanguage||navigator.systemLanguage),0!==browserLanguages.length&&(browserLanguages=browserLanguages.join("|").toLowerCase().split("|")),browserLanguages}};"undefined"!=typeof module&&module.exports&&(module.exports={VScomMLBrowserRedirect:VScomMLBrowserRedirect}); VScomMLBrowserRedirect = new VScomMLBrowserRedirect(); VScomMLBrowserRedirect.init(); </script> <script> /*! lazysizes - v4.1.3 | For lazy loading images */ ! function(a, b) { var c = b(a, a.document); a.lazySizes = c, "object" == typeof module && module.exports && (module.exports = c) }(window, function(a, b) { "use strict"; if (b.getElementsByClassName) { var c, d, e = b.documentElement, f = a.Date, g = a.HTMLPictureElement, h = "addEventListener", i = "getAttribute", j = a[h], k = a.setTimeout, l = a.requestAnimationFrame || k, m = a.requestIdleCallback, n = /^picture$/i, o = ["load", "error", "lazyincluded", "_lazyloaded"], p = {}, q = Array.prototype.forEach, r = function(a, b) { return p[b] || (p[b] = new RegExp("(\\s|^)" + b + "(\\s|$)")), p[b].test(a[i]("class") || "") && p[b] }, s = function(a, b) { r(a, b) || a.setAttribute("class", (a[i]("class") || "").trim() + " " + b) }, t = function(a, b) { var c; (c = r(a, b)) && a.setAttribute("class", (a[i]("class") || "").replace(c, " ")) }, u = function(a, b, c) { var d = c ? h : "removeEventListener"; c && u(a, b), o.forEach(function(c) { a[d](c, b) }) }, v = function(a, d, e, f, g) { var h = b.createEvent("Event"); return e || (e = {}), e.instance = c, h.initEvent(d, !f, !g), h.detail = e, a.dispatchEvent(h), h }, w = function(b, c) { var e; !g && (e = a.picturefill || d.pf) ? (c && c.src && !b[i]("srcset") && b.setAttribute("srcset", c.src), e({ reevaluate: !0, elements: [b] })) : c && c.src && (b.src = c.src) }, x = function(a, b) { return (getComputedStyle(a, null) || {})[b] }, y = function(a, b, c) { for (c = c || a.offsetWidth; c < d.minSize && b && !a._lazysizesWidth;) c = b.offsetWidth, b = b.parentNode; return c }, z = function() { var a, c, d = [], e = [], f = d, g = function() { var b = f; for (f = d.length ? e : d, a = !0, c = !1; b.length;) b.shift()(); a = !1 }, h = function(d, e) { a && !e ? d.apply(this, arguments) : (f.push(d), c || (c = !0, (b.hidden ? k : l)(g))) }; return h._lsFlush = g, h }(), A = function(a, b) { return b ? function() { z(a) } : function() { var b = this, c = arguments; z(function() { a.apply(b, c) }) } }, B = function(a) { var b, c = 0, e = d.throttleDelay, g = d.ricTimeout, h = function() { b = !1, c = f.now(), a() }, i = m && g > 49 ? function() { m(h, { timeout: g }), g !== d.ricTimeout && (g = d.ricTimeout) } : A(function() { k(h) }, !0); return function(a) { var d; (a = a === !0) && (g = 33), b || (b = !0, d = e - (f.now() - c), 0 > d && (d = 0), a || 9 > d ? i() : k(i, d)) } }, C = function(a) { var b, c, d = 99, e = function() { b = null, a() }, g = function() { var a = f.now() - c; d > a ? k(g, d - a) : (m || e)(e) }; return function() { c = f.now(), b || (b = k(g, d)) } }; ! function() { var b, c = { lazyClass: "lazyload", loadedClass: "lazyloaded", loadingClass: "lazyloading", preloadClass: "lazypreload", errorClass: "lazyerror", autosizesClass: "lazyautosizes", srcAttr: "data-src", srcsetAttr: "data-srcset", sizesAttr: "data-sizes", minSize: 40, customMedia: {}, init: !0, expFactor: 1.5, hFac: .8, loadMode: 2, loadHidden: !0, ricTimeout: 0, throttleDelay: 125 }; d = a.lazySizesConfig || a.lazysizesConfig || {}; for (b in c) b in d || (d[b] = c[b]); a.lazySizesConfig = d, k(function() { d.init && F() }) }(); var D = function() { var g, l, m, o, p, y, D, F, G, H, I, J, K, L, M = /^img$/i, N = /^iframe$/i, O = "onscroll" in a && !/(gle|ing)bot/.test(navigator.userAgent), P = 0, Q = 0, R = 0, S = -1, T = function(a) { R--, a && a.target && u(a.target, T), (!a || 0 > R || !a.target) && (R = 0) }, U = function(a, c) { var d, f = a, g = "hidden" == x(b.body, "visibility") || "hidden" != x(a.parentNode, "visibility") && "hidden" != x(a, "visibility"); for (F -= c, I += c, G -= c, H += c; g && (f = f.offsetParent) && f != b.body && f != e;) g = (x(f, "opacity") || 1) > 0, g && "visible" != x(f, "overflow") && (d = f.getBoundingClientRect(), g = H > d.left && G < d.right && I > d.top - 1 && F < d.bottom + 1); return g }, V = function() { var a, f, h, j, k, m, n, p, q, r = c.elements; if ((o = d.loadMode) && 8 > R && (a = r.length)) { f = 0, S++, null == K && ("expand" in d || (d.expand = e.clientHeight > 500 && e.clientWidth > 500 ? 500 : 370), J = d.expand, K = J * d.expFactor), K > Q && 1 > R && S > 2 && o > 2 && !b.hidden ? (Q = K, S = 0) : Q = o > 1 && S > 1 && 6 > R ? J : P; for (; a > f; f++) if (r[f] && !r[f]._lazyRace) if (O) if ((p = r[f][i]("data-expand")) && (m = 1 * p) || (m = Q), q !== m && (y = innerWidth + m * L, D = innerHeight + m, n = -1 * m, q = m), h = r[f].getBoundingClientRect(), (I = h.bottom) >= n && (F = h.top) <= D && (H = h.right) >= n * L && (G = h.left) <= y && (I || H || G || F) && (d.loadHidden || "hidden" != x(r[f], "visibility")) && (l && 3 > R && !p && (3 > o || 4 > S) || U(r[f], m))) { if (ba(r[f]), k = !0, R > 9) break } else !k && l && !j && 4 > R && 4 > S && o > 2 && (g[0] || d.preloadAfterLoad) && (g[0] || !p && (I || H || G || F || "auto" != r[f][i](d.sizesAttr))) && (j = g[0] || r[f]); else ba(r[f]); j && !k && ba(j) } }, W = B(V), X = function(a) { s(a.target, d.loadedClass), t(a.target, d.loadingClass), u(a.target, Z), v(a.target, "lazyloaded") }, Y = A(X), Z = function(a) { Y({ target: a.target }) }, $ = function(a, b) { try { a.contentWindow.location.replace(b) } catch (c) { a.src = b } }, _ = function(a) { var b, c = a[i](d.srcsetAttr); (b = d.customMedia[a[i]("data-media") || a[i]("media")]) && a.setAttribute("media", b), c && a.setAttribute("srcset", c) }, aa = A(function(a, b, c, e, f) { var g, h, j, l, o, p; (o = v(a, "lazybeforeunveil", b)).defaultPrevented || (e && (c ? s(a, d.autosizesClass) : a.setAttribute("sizes", e)), h = a[i](d.srcsetAttr), g = a[i](d.srcAttr), f && (j = a.parentNode, l = j && n.test(j.nodeName || "")), p = b.firesLoad || "src" in a && (h || g || l), o = { target: a }, p && (u(a, T, !0), clearTimeout(m), m = k(T, 2500), s(a, d.loadingClass), u(a, Z, !0)), l && q.call(j.getElementsByTagName("source"), _), h ? a.setAttribute("srcset", h) : g && !l && (N.test(a.nodeName) ? $(a, g) : a.src = g), f && (h || l) && w(a, { src: g })), a._lazyRace && delete a._lazyRace, t(a, d.lazyClass), z(function() { (!p || a.complete && a.naturalWidth > 1) && (p ? T(o) : R--, X(o)) }, !0) }), ba = function(a) { var b, c = M.test(a.nodeName), e = c && (a[i](d.sizesAttr) || a[i]("sizes")), f = "auto" == e; (!f && l || !c || !a[i]("src") && !a.srcset || a.complete || r(a, d.errorClass) || !r(a, d.lazyClass)) && (b = v(a, "lazyunveilread").detail, f && E.updateElem(a, !0, a.offsetWidth), a._lazyRace = !0, R++, aa(a, b, f, e, c)) }, ca = function() { if (!l) { if (f.now() - p < 999) return void k(ca, 999); var a = C(function() { d.loadMode = 3, W() }); l = !0, d.loadMode = 3, W(), j("scroll", function() { 3 == d.loadMode && (d.loadMode = 2), a() }, !0) } }; return { _: function() { p = f.now(), c.elements = b.getElementsByClassName(d.lazyClass), g = b.getElementsByClassName(d.lazyClass + " " + d.preloadClass), L = d.hFac, j("scroll", W, !0), j("resize", W, !0), a.MutationObserver ? new MutationObserver(W).observe(e, { childList: !0, subtree: !0, attributes: !0 }) : (e[h]("DOMNodeInserted", W, !0), e[h]("DOMAttrModified", W, !0), setInterval(W, 999)), j("hashchange", W, !0), ["focus", "mouseover", "click", "load", "transitionend", "animationend", "webkitAnimationEnd"].forEach(function(a) { b[h](a, W, !0) }), /d$|^c/.test(b.readyState) ? ca() : (j("load", ca), b[h]("DOMContentLoaded", W), k(ca, 2e4)), c.elements.length ? (V(), z._lsFlush()) : W() }, checkElems: W, unveil: ba } }(), E = function() { var a, c = A(function(a, b, c, d) { var e, f, g; if (a._lazysizesWidth = d, d += "px", a.setAttribute("sizes", d), n.test(b.nodeName || "")) for (e = b.getElementsByTagName("source"), f = 0, g = e.length; g > f; f++) e[f].setAttribute("sizes", d); c.detail.dataAttr || w(a, c.detail) }), e = function(a, b, d) { var e, f = a.parentNode; f && (d = y(a, f, d), e = v(a, "lazybeforesizes", { width: d, dataAttr: !!b }), e.defaultPrevented || (d = e.detail.width, d && d !== a._lazysizesWidth && c(a, f, e, d))) }, f = function() { var b, c = a.length; if (c) for (b = 0; c > b; b++) e(a[b]) }, g = C(f); return { _: function() { a = b.getElementsByClassName(d.autosizesClass), j("resize", g) }, checkElems: g, updateElem: e } }(), F = function() { F.i || (F.i = !0, E._(), D._()) }; return c = { cfg: d, autoSizer: E, loader: D, init: F, uP: w, aC: s, rC: t, hC: r, fire: v, gW: y, rAF: z } } }); </script> <meta name="format-detection" content="telephone=no" /> <meta name="baidu-site-verification" content="codeva-dhhqsW34IG" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute('data-useragent', navigator.userAgent); </script> <script> function searchbuttonclick() { if (!isSearchFieldVisible()) { displaySearchField(); focusSearchField(); } else if (document.getElementById('searchinput').value) { document.getElementById('searchform').submit(); } else { closeSearchBox(); } } function focusSearchField() { var textBox = jQuery("#searchfield"); textBox = textBox.length > 0 ? textBox[0] : null; jQuery("#searchfield").focus(); if (!!textBox && textBox != document.activeElement) { textBox.focus(); } } function clearSearchText() { document.getElementById('searchinput').value=''; } function isSearchFieldVisible() { return document.getElementById('searchfield').style.display !== 'none'; } function displaySearchField() { document.getElementById('searchfield').style.display = 'inline-block'; } function closeSearchBox(){ clearSearchText(); document.getElementById('searchfield').style.display = 'none'; } </script> <script> window.performance && performance.mark && performance.mark("HeadAreaEnd") </script> </head> <body class="home page-template page-template-100-modern page-template-100-modern-php page page-id-27308 microsoft-uhf awb-no-sidebars fusion-image-hovers fusion-pagination-sizing fusion-button_type-flat fusion-button_span-no fusion-button_gradient-linear avada-image-rollover-circle-yes avada-image-rollover-yes avada-image-rollover-direction-left fusion-body ltr no-tablet-sticky-header no-mobile-sticky-header no-mobile-slidingbar no-desktop-totop no-mobile-totop fusion-sub-menu-fade mobile-logo-pos-left layout-wide-mode avada-has-boxed-modal-shadow-none layout-scroll-offset-full avada-has-zero-margin-offset-top fusion-top-header menu-text-align-center mobile-menu-design-modern fusion-show-pagination-text fusion-header-layout-v1 avada-responsive avada-footer-fx-none avada-menu-highlight-style-bar fusion-search-form-classic fusion-main-menu-search-dropdown fusion-avatar-square avada-dropdown-styles avada-blog-layout-medium alternate avada-blog-archive-layout-large avada-header-shadow-no avada-menu-icon-position-left avada-has-100-footer avada-has-breadcrumb-mobile-hidden avada-has-titlebar-bar_and_content avada-has-pagination-padding avada-flyout-menu-direction-fade avada-ec-views-v1"> <!-- Loading Accessibility Automation Tool in all non prod env --> <!-- Loading Accessibility Automation Tool in all non prod env --> <div id="headerArea" class="uhf" data-m='{"cN":"headerArea","cT":"Area_coreuiArea","id":"a1Body","sN":1,"aN":"Body"}'> <div id="headerRegion" data-region-key="headerregion" data-m='{"cN":"headerRegion","cT":"Region_coreui-region","id":"r1a1","sN":1,"aN":"a1"}' > <div id="headerUniversalHeader" data-m='{"cN":"headerUniversalHeader","cT":"Module_coreui-universalheader","id":"m1r1a1","sN":1,"aN":"r1a1"}' data-module-id="Category|headerRegion|coreui-region|headerUniversalHeader|coreui-universalheader"> <div data-m='{"cN":"cookiebanner_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}'> <div id="uhfCookieAlert" data-locale="en-us"> <div id="msccBannerV2"></div> </div> </div> <a id="uhfSkipToMain" class="m-skip-to-main" href="javascript:void(0)" data-href="#main" tabindex="0" data-m='{"cN":"Skip to content_nonnav","id":"nn2m1r1a1","sN":2,"aN":"m1r1a1"}'>Skip to main content</a> <header class="c-uhfh context-uhf no-js c-sgl-stck c-category-header " itemscope="itemscope" data-header-footprint="/VisualStudio/VisualStudioHeaderMsftPROD-Dark-1, fromService: True" data-magict="true" itemtype="http://schema.org/Organization"> <div class="theme-dark js-global-head f-closed global-head-cont" data-m='{"cN":"Universal Header_cont","cT":"Container","id":"c3m1r1a1","sN":3,"aN":"m1r1a1"}'> <div class="c-uhfh-gcontainer-st"> <button type="button" class="c-action-trigger c-glyph glyph-global-nav-button" aria-label="All Microsoft expand to see list of Microsoft products and services" initialState-label="All Microsoft expand to see list of Microsoft products and services" toggleState-label="Close All Microsoft list" aria-expanded="false" data-m='{"cN":"Mobile menu button_nonnav","id":"nn1c3m1r1a1","sN":1,"aN":"c3m1r1a1"}'></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy c-close-search" aria-label="Close search" aria-expanded="false" data-m='{"cN":"Close Search_nonnav","id":"nn2c3m1r1a1","sN":2,"aN":"c3m1r1a1"}'></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://www.microsoft.com" aria-label="Microsoft" data-m='{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c3m1r1a1","sN":3,"aN":"c3m1r1a1"}'> <img alt="" itemprop="logo" class="c-image" src="https://uhf.microsoft.com/images/microsoft/RE1MmB8.png" role="presentation" aria-hidden="true" /> <span itemprop="name" role="presentation" aria-hidden="true">Microsoft</span> </a> <div class="f-mobile-title"> <button type="button" class="c-action-trigger c-glyph glyph-chevron-left" aria-label="See more menu options" data-m='{"cN":"Mobile back button_nonnav","id":"nn4c3m1r1a1","sN":4,"aN":"c3m1r1a1"}'></button> <span data-global-title="Microsoft home" class="js-mobile-title">Visual Studio</span> <button type="button" class="c-action-trigger c-glyph glyph-chevron-right" aria-label="See more menu options" data-m='{"cN":"Mobile forward button_nonnav","id":"nn5c3m1r1a1","sN":5,"aN":"c3m1r1a1"}'></button> </div> <div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="https://visualstudio.microsoft.com/" aria-label="Visual Studio" itemprop="url" data-m='{"cN":"CatNav_Visual Studio_nav","id":"n6c3m1r1a1","sN":6,"aN":"c3m1r1a1"}'> <span>Visual Studio</span> </a> </div> <div class="cat-logo-button-cont x-hidden"> <button type="button" id="uhfCatLogoButton" class="c-cat-logo-button x-hidden" aria-expanded="false" aria-label="Visual Studio" data-m='{"cN":"Visual Studio_nonnav","id":"nn7c3m1r1a1","sN":7,"aN":"c3m1r1a1"}'> Visual Studio </button> </div> <nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m='{"cN":"Category nav_cont","cT":"Container","id":"c8c3m1r1a1","sN":8,"aN":"c3m1r1a1"}'> <ul class="js-paddle-items"> <li class="single-link js-nav-menu x-hidden-none-mobile-vp uhf-menu-item"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"CatNav_Home_nav","id":"n1c8c3m1r1a1","sN":1,"aN":"c8c3m1r1a1"}' > Home </a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="devblogs-menu-item" aria-expanded="false" data-m='{"cN":"CatNav_Developer Tools_nonnav","id":"nn2c8c3m1r1a1","sN":2,"aN":"c8c3m1r1a1"}'>Developer Tools</button> <ul class="f-multi-column f-multi-column-2" data-class-idn="f-multi-column f-multi-column-2" aria-hidden="true" data-m='{"cN":"Developer Tools_cont","cT":"Container","id":"c3c8c3m1r1a1","sN":3,"aN":"c8c3m1r1a1"}'> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio 2022_cont","cT":"Container","id":"c1c3c8c3m1r1a1","sN":1,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_41-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn1c1c3c8c3m1r1a1","sN":1,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</span> <button id="uhf-navbtn-shellmenu_41-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn2c1c3c8c3m1r1a1","sN":2,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_41-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c1c3c8c3m1r1a1","sN":3,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_42" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c1c3c8c3m1r1a1","sN":1,"aN":"c3c1c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Features_cont","cT":"Container","id":"c4c1c3c8c3m1r1a1","sN":4,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_43" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/features/" data-m='{"cN":"CatNav_Features_nav","id":"n1c4c1c3c8c3m1r1a1","sN":1,"aN":"c4c1c3c8c3m1r1a1"}'>Features</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Editions_cont","cT":"Container","id":"c5c1c3c8c3m1r1a1","sN":5,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_44" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/compare/" data-m='{"cN":"CatNav_Editions_nav","id":"n1c5c1c3c8c3m1r1a1","sN":1,"aN":"c5c1c3c8c3m1r1a1"}'>Editions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c6c1c3c8c3m1r1a1","sN":6,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_45" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vs" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c6c1c3c8c3m1r1a1","sN":1,"aN":"c6c1c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Get Started_cont","cT":"Container","id":"c7c1c3c8c3m1r1a1","sN":7,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_46" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/getting-started/" data-m='{"cN":"CatNav_Get Started_nav","id":"n1c7c1c3c8c3m1r1a1","sN":1,"aN":"c7c1c3c8c3m1r1a1"}'>Get Started</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Service Status_cont","cT":"Container","id":"c8c1c3c8c3m1r1a1","sN":8,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_47" class="js-subm-uhf-nav-link" href="https://aka.ms/vsstatus" data-m='{"cN":"CatNav_Service Status_nav","id":"n1c8c1c3c8c3m1r1a1","sN":1,"aN":"c8c1c3c8c3m1r1a1"}'>Service Status</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"FAQ Support_cont","cT":"Container","id":"c9c1c3c8c3m1r1a1","sN":9,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_48" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/support/" data-m='{"cN":"CatNav_FAQ Support_nav","id":"n1c9c1c3c8c3m1r1a1","sN":1,"aN":"c9c1c3c8c3m1r1a1"}'>FAQ Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c10c1c3c8c3m1r1a1","sN":10,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_49" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c10c1c3c8c3m1r1a1","sN":1,"aN":"c10c1c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c11c1c3c8c3m1r1a1","sN":11,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_50" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Blog_nav","id":"n1c11c1c3c8c3m1r1a1","sN":1,"aN":"c11c1c3c8c3m1r1a1"}'>Blog</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio Code_cont","cT":"Container","id":"c2c3c8c3m1r1a1","sN":2,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_51-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn1c2c3c8c3m1r1a1","sN":1,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</span> <button id="uhf-navbtn-shellmenu_51-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn2c2c3c8c3m1r1a1","sN":2,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_51-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c2c3c8c3m1r1a1","sN":3,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_52" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c2c3c8c3m1r1a1","sN":1,"aN":"c3c2c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c4c2c3c8c3m1r1a1","sN":4,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_53" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vscode" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c4c2c3c8c3m1r1a1","sN":1,"aN":"c4c2c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support_cont","cT":"Container","id":"c5c2c3c8c3m1r1a1","sN":5,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_54" class="js-subm-uhf-nav-link" href="https://support.serviceshub.microsoft.com/supportforbusiness/create?sapId=d66407ed-3967-b000-4cfb-2c318cad363d" data-m='{"cN":"CatNav_Support_nav","id":"n1c5c2c3c8c3m1r1a1","sN":1,"aN":"c5c2c3c8c3m1r1a1"}'>Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c6c2c3c8c3m1r1a1","sN":6,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_55" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/docs" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c6c2c3c8c3m1r1a1","sN":1,"aN":"c6c2c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c7c2c3c8c3m1r1a1","sN":7,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_56" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/blogs" data-m='{"cN":"CatNav_Blog_nav","id":"n1c7c2c3c8c3m1r1a1","sN":1,"aN":"c7c2c3c8c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"VS Code for Education_cont","cT":"Container","id":"c8c2c3c8c3m1r1a1","sN":8,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_57" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vscode-edu/" data-m='{"cN":"CatNav_VS Code for Education_nav","id":"n1c8c2c3c8c3m1r1a1","sN":1,"aN":"c8c2c3c8c3m1r1a1"}'>VS Code for Education</a> </li> </ul> </li> </ul> </div> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_58" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/downloads/" data-m='{"cN":"CatNav_Downloads_nav","id":"n4c8c3m1r1a1","sN":4,"aN":"c8c3m1r1a1"}'>Downloads</a> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_59" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/pricing/?tab=paid-subscriptions" data-m='{"cN":"CatNav_Buy_nav","id":"n5c8c3m1r1a1","sN":5,"aN":"c8c3m1r1a1"}'>Buy</a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="c-shellmenu_60" aria-expanded="false" data-m='{"cN":"CatNav_Subscriptions_nonnav","id":"nn6c8c3m1r1a1","sN":6,"aN":"c8c3m1r1a1"}'>Subscriptions</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Subscriptions_cont","cT":"Container","id":"c7c8c3m1r1a1","sN":7,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c1c7c8c3m1r1a1","sN":1,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_61" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c1c7c8c3m1r1a1","sN":1,"aN":"c1c7c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support​_cont","cT":"Container","id":"c2c7c8c3m1r1a1","sN":2,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_62" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/support/" data-m='{"cN":"CatNav_Support​_nav","id":"n1c2c7c8c3m1r1a1","sN":1,"aN":"c2c7c8c3m1r1a1"}'>Support​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Administrator Portal​_cont","cT":"Container","id":"c3c7c8c3m1r1a1","sN":3,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_63" class="js-subm-uhf-nav-link" href="https://manage.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Administrator Portal​_nav","id":"n1c3c7c8c3m1r1a1","sN":1,"aN":"c3c7c8c3m1r1a1"}'>Administrator Portal​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Subscriber Portal​_cont","cT":"Container","id":"c4c7c8c3m1r1a1","sN":4,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_64" class="js-subm-uhf-nav-link" href="https://my.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Subscriber Portal​_nav","id":"n1c4c7c8c3m1r1a1","sN":1,"aN":"c4c7c8c3m1r1a1"}'>Subscriber Portal​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dev Essentials_cont","cT":"Container","id":"c5c7c8c3m1r1a1","sN":5,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_65" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/dev-essentials/" data-m='{"cN":"CatNav_Dev Essentials_nav","id":"n1c5c7c8c3m1r1a1","sN":1,"aN":"c5c7c8c3m1r1a1"}'>Dev Essentials</a> </li> </ul> </div> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_66" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/hub/" data-m='{"cN":"CatNav_Visual Studio Hub_nav","id":"n8c8c3m1r1a1","sN":8,"aN":"c8c3m1r1a1"}'>Visual Studio Hub</a> </li> <li id="overflow-menu" class="overflow-menu x-hidden uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button data-m='{"pid":"More","id":"nn9c8c3m1r1a1","sN":9,"aN":"c8c3m1r1a1"}' type="button" aria-label="More" aria-expanded="false">More</button> <ul id="overflow-menu-list" aria-hidden="true" class="overflow-menu-list"> </ul> </div> </li> <li class="single-link js-nav-menu" id="c-uhf-nav-cta"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/free-developer-offers/" data-m='{"cN":"CatNav_cta_Free Visual Studio_nav","id":"n10c8c3m1r1a1","sN":10,"aN":"c8c3m1r1a1"}'>Free Visual Studio</a> </li> </ul> </nav> <div class="c-uhfh-actions" data-m='{"cN":"Header actions_cont","cT":"Container","id":"c9c3m1r1a1","sN":9,"aN":"c3m1r1a1"}'> <div class="wf-menu"> <nav id="uhf-c-nav" aria-label="All Microsoft menu" data-m='{"cN":"GlobalNav_cont","cT":"Container","id":"c1c9c3m1r1a1","sN":1,"aN":"c9c3m1r1a1"}'> <ul class="js-paddle-items"> <li> <div class="c-uhf-menu js-nav-menu"> <button type="button" class="c-button-logo all-ms-nav" aria-expanded="false" data-m='{"cN":"GlobalNav_More_nonnav","id":"nn1c1c9c3m1r1a1","sN":1,"aN":"c1c9c3m1r1a1"}'> <span>All Microsoft</span></button> <ul class="f-multi-column f-multi-column-4" aria-hidden="true" data-m='{"cN":"More_cont","cT":"Container","id":"c2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}'> <li class="c-w0-contr"> <h2 class="c-uhf-sronly">Global</h2> <ul class="c-w0"> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Security_cont","cT":"Container","id":"c1c2c1c9c3m1r1a1","sN":1,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_0" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"W0Nav_Microsoft Security_nav","id":"n1c1c2c1c9c3m1r1a1","sN":1,"aN":"c1c2c1c9c3m1r1a1"}'>Microsoft Security</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure_cont","cT":"Container","id":"c2c2c1c9c3m1r1a1","sN":2,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_1" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Azure_nav","id":"n1c2c2c1c9c3m1r1a1","sN":1,"aN":"c2c2c1c9c3m1r1a1"}'>Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dynamics 365_cont","cT":"Container","id":"c3c2c1c9c3m1r1a1","sN":3,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_2" class="js-subm-uhf-nav-link" href="https://dynamics.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Dynamics 365_nav","id":"n1c3c2c1c9c3m1r1a1","sN":1,"aN":"c3c2c1c9c3m1r1a1"}'>Dynamics 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft 365_cont","cT":"Container","id":"c4c2c1c9c3m1r1a1","sN":4,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_3" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-365/business/" data-m='{"cN":"W0Nav_Microsoft 365_nav","id":"n1c4c2c1c9c3m1r1a1","sN":1,"aN":"c4c2c1c9c3m1r1a1"}'>Microsoft 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Teams_cont","cT":"Container","id":"c5c2c1c9c3m1r1a1","sN":5,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_4" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"W0Nav_Microsoft Teams_nav","id":"n1c5c2c1c9c3m1r1a1","sN":1,"aN":"c5c2c1c9c3m1r1a1"}'>Microsoft Teams</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows 365_cont","cT":"Container","id":"c6c2c1c9c3m1r1a1","sN":6,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_5" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/windows-365" data-m='{"cN":"W0Nav_Windows 365_nav","id":"n1c6c2c1c9c3m1r1a1","sN":1,"aN":"c6c2c1c9c3m1r1a1"}'>Windows 365</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c7c2c1c9c3m1r1a1","sN":7,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_7-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c2c1c9c3m1r1a1"}'>Tech &amp; innovation</span> <button id="uhf-navbtn-shellmenu_7-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c7c2c1c9c3m1r1a1","sN":2,"aN":"c7c2c1c9c3m1r1a1"}'>Tech &amp; innovation</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_7-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftCloud_cont","cT":"Container","id":"c3c7c2c1c9c3m1r1a1","sN":3,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_8" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftCloud_nav","id":"n1c3c7c2c1c9c3m1r1a1","sN":1,"aN":"c3c7c2c1c9c3m1r1a1"}'>Microsoft Cloud</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation__AI_cont","cT":"Container","id":"c4c7c2c1c9c3m1r1a1","sN":4,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_9" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/ai" data-m='{"cN":"GlobalNav_More_TechInnovation__AI_nav","id":"n1c4c7c2c1c9c3m1r1a1","sN":1,"aN":"c4c7c2c1c9c3m1r1a1"}'>AI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_AzureSpace_cont","cT":"Container","id":"c5c7c2c1c9c3m1r1a1","sN":5,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_10" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/space/" data-m='{"cN":"GlobalNav_More_TechInnovation_AzureSpace_nav","id":"n1c5c7c2c1c9c3m1r1a1","sN":1,"aN":"c5c7c2c1c9c3m1r1a1"}'>Azure Space</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MixedReality_cont","cT":"Container","id":"c6c7c2c1c9c3m1r1a1","sN":6,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_11" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/mixed-reality/windows-mixed-reality" data-m='{"cN":"GlobalNav_More_TechInnovation_MixedReality_nav","id":"n1c6c7c2c1c9c3m1r1a1","sN":1,"aN":"c6c7c2c1c9c3m1r1a1"}'>Mixed reality</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftHololens_cont","cT":"Container","id":"c7c7c2c1c9c3m1r1a1","sN":7,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_12" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/hololens" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftHololens_nav","id":"n1c7c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c7c2c1c9c3m1r1a1"}'>Microsoft HoloLens</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Microsoft Viva_cont","cT":"Container","id":"c8c7c2c1c9c3m1r1a1","sN":8,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_13" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-viva" data-m='{"cN":"GlobalNav_More_TechInnovation_Microsoft Viva_nav","id":"n1c8c7c2c1c9c3m1r1a1","sN":1,"aN":"c8c7c2c1c9c3m1r1a1"}'>Microsoft Viva</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_QuantumComputing_cont","cT":"Container","id":"c9c7c2c1c9c3m1r1a1","sN":9,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_14" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/quantum-computing/" data-m='{"cN":"GlobalNav_More_TechInnovation_QuantumComputing_nav","id":"n1c9c7c2c1c9c3m1r1a1","sN":1,"aN":"c9c7c2c1c9c3m1r1a1"}'>Quantum computing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Sustainability_cont","cT":"Container","id":"c10c7c2c1c9c3m1r1a1","sN":10,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_15" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"GlobalNav_More_TechInnovation_Sustainability_nav","id":"n1c10c7c2c1c9c3m1r1a1","sN":1,"aN":"c10c7c2c1c9c3m1r1a1"}'>Sustainability</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c8c2c1c9c3m1r1a1","sN":8,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_16-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</span> <button id="uhf-navbtn-shellmenu_16-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c8c2c1c9c3m1r1a1","sN":2,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_16-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Education_cont","cT":"Container","id":"c3c8c2c1c9c3m1r1a1","sN":3,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_17" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"GlobalNav_More_Industries_Education_nav","id":"n1c3c8c2c1c9c3m1r1a1","sN":1,"aN":"c3c8c2c1c9c3m1r1a1"}'>Education</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Automotive_cont","cT":"Container","id":"c4c8c2c1c9c3m1r1a1","sN":4,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_18" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/automotive" data-m='{"cN":"GlobalNav_More_Industries_Automotive_nav","id":"n1c4c8c2c1c9c3m1r1a1","sN":1,"aN":"c4c8c2c1c9c3m1r1a1"}'>Automotive</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Financialservices_cont","cT":"Container","id":"c5c8c2c1c9c3m1r1a1","sN":5,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_19" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/financial-services/banking" data-m='{"cN":"GlobalNav_More_Industries_Financialservices_nav","id":"n1c5c8c2c1c9c3m1r1a1","sN":1,"aN":"c5c8c2c1c9c3m1r1a1"}'>Financial services</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Government_cont","cT":"Container","id":"c6c8c2c1c9c3m1r1a1","sN":6,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_20" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/government" data-m='{"cN":"GlobalNav_More_Industries_Government_nav","id":"n1c6c8c2c1c9c3m1r1a1","sN":1,"aN":"c6c8c2c1c9c3m1r1a1"}'>Government</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Health_cont","cT":"Container","id":"c7c8c2c1c9c3m1r1a1","sN":7,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_21" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/health/microsoft-cloud-for-healthcare" data-m='{"cN":"GlobalNav_More_Industries_Health_nav","id":"n1c7c8c2c1c9c3m1r1a1","sN":1,"aN":"c7c8c2c1c9c3m1r1a1"}'>Healthcare</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Manufacturing_cont","cT":"Container","id":"c8c8c2c1c9c3m1r1a1","sN":8,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_22" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/manufacturing/microsoft-cloud-for-manufacturing" data-m='{"cN":"GlobalNav_More_Industries_Manufacturing_nav","id":"n1c8c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c8c2c1c9c3m1r1a1"}'>Manufacturing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Retail_cont","cT":"Container","id":"c9c8c2c1c9c3m1r1a1","sN":9,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_23" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/consumer-goods" data-m='{"cN":"GlobalNav_More_Industries_Retail_nav","id":"n1c9c8c2c1c9c3m1r1a1","sN":1,"aN":"c9c8c2c1c9c3m1r1a1"}'>Retail</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Allindustries_cont","cT":"Container","id":"c10c8c2c1c9c3m1r1a1","sN":10,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_24" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry" data-m='{"cN":"GlobalNav_More_Industries_Allindustries_nav","id":"n1c10c8c2c1c9c3m1r1a1","sN":1,"aN":"c10c8c2c1c9c3m1r1a1"}'>All industries</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c9c2c1c9c3m1r1a1","sN":9,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_25-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c9c2c1c9c3m1r1a1","sN":1,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</span> <button id="uhf-navbtn-shellmenu_25-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c9c2c1c9c3m1r1a1","sN":2,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_25-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_FindPartner_cont","cT":"Container","id":"c3c9c2c1c9c3m1r1a1","sN":3,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_26" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/" data-m='{"cN":"GlobalNav_More_Partner_FindPartner_nav","id":"n1c3c9c2c1c9c3m1r1a1","sN":1,"aN":"c3c9c2c1c9c3m1r1a1"}'>Find a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_BecomePartner_cont","cT":"Container","id":"c4c9c2c1c9c3m1r1a1","sN":4,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_27" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/membership/cloud-solution-provider" data-m='{"cN":"GlobalNav_More_Partner_BecomePartner_nav","id":"n1c4c9c2c1c9c3m1r1a1","sN":1,"aN":"c4c9c2c1c9c3m1r1a1"}'>Become a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_PartnerNetwork_cont","cT":"Container","id":"c5c9c2c1c9c3m1r1a1","sN":5,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_28" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-us/membership" data-m='{"cN":"GlobalNav_More_Partner_PartnerNetwork_nav","id":"n1c5c9c2c1c9c3m1r1a1","sN":1,"aN":"c5c9c2c1c9c3m1r1a1"}'>Partner Network</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AzureMarketplace_cont","cT":"Container","id":"c6c9c2c1c9c3m1r1a1","sN":6,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_29" class="js-subm-uhf-nav-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AzureMarketplace_nav","id":"n1c6c9c2c1c9c3m1r1a1","sN":1,"aN":"c6c9c2c1c9c3m1r1a1"}'>Azure Marketplace</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AppSource_cont","cT":"Container","id":"c7c9c2c1c9c3m1r1a1","sN":7,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_30" class="js-subm-uhf-nav-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AppSource_nav","id":"n1c7c9c2c1c9c3m1r1a1","sN":1,"aN":"c7c9c2c1c9c3m1r1a1"}'>AppSource</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c10c2c1c9c3m1r1a1","sN":10,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_31-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</span> <button id="uhf-navbtn-shellmenu_31-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c10c2c1c9c3m1r1a1","sN":2,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_31-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Blog_cont","cT":"Container","id":"c3c10c2c1c9c3m1r1a1","sN":3,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_32" class="js-subm-uhf-nav-link" href="https://blogs.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_Blog_nav","id":"n1c3c10c2c1c9c3m1r1a1","sN":1,"aN":"c3c10c2c1c9c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftAdvertising_cont","cT":"Container","id":"c4c10c2c1c9c3m1r1a1","sN":4,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_33" class="js-subm-uhf-nav-link" href="https://about.ads.microsoft.com/en-us?s_cid=dig-src_uhfcomm" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftAdvertising_nav","id":"n1c4c10c2c1c9c3m1r1a1","sN":1,"aN":"c4c10c2c1c9c3m1r1a1"}'>Microsoft Advertising</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_DeveloperCenter_cont","cT":"Container","id":"c5c10c2c1c9c3m1r1a1","sN":5,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_34" class="js-subm-uhf-nav-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Resources_DeveloperCenter_nav","id":"n1c5c10c2c1c9c3m1r1a1","sN":1,"aN":"c5c10c2c1c9c3m1r1a1"}'>Developer Center</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Documentation_cont","cT":"Container","id":"c6c10c2c1c9c3m1r1a1","sN":6,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_35" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"GlobalNav_More_Resources_Documentation_nav","id":"n1c6c10c2c1c9c3m1r1a1","sN":1,"aN":"c6c10c2c1c9c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Events_cont","cT":"Container","id":"c7c10c2c1c9c3m1r1a1","sN":7,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_36" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/events" data-m='{"cN":"GlobalNav_More_Resources_Events_nav","id":"n1c7c10c2c1c9c3m1r1a1","sN":1,"aN":"c7c10c2c1c9c3m1r1a1"}'>Events</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Licensing_cont","cT":"Container","id":"c8c10c2c1c9c3m1r1a1","sN":8,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_37" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/licensing/" data-m='{"cN":"GlobalNav_More_Resources_Licensing_nav","id":"n1c8c10c2c1c9c3m1r1a1","sN":1,"aN":"c8c10c2c1c9c3m1r1a1"}'>Licensing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftLearn_cont","cT":"Container","id":"c9c10c2c1c9c3m1r1a1","sN":9,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_38" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftLearn_nav","id":"n1c9c10c2c1c9c3m1r1a1","sN":1,"aN":"c9c10c2c1c9c3m1r1a1"}'>Microsoft Learn</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftResearch_cont","cT":"Container","id":"c10c10c2c1c9c3m1r1a1","sN":10,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_39" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/research/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftResearch_nav","id":"n1c10c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c10c2c1c9c3m1r1a1"}'>Microsoft Research</a> </li> </ul> </li> <li class="f-multi-column-info"> <a data-m='{"id":"n11c2c1c9c3m1r1a1","sN":11,"aN":"c2c1c9c3m1r1a1"}' href="https://www.microsoft.com/en-us/sitemap" aria-label="" class="c-glyph">View Sitemap</a> </li> </ul> </div> </li> </ul> </nav> </div> <form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/en-us/search/" method="GET" data-seAutoSuggest='{"isAutosuggestDisabled":false,"queryParams":{"market":"en-us","clientId":"7F27B536-CF6B-4C65-8638-A0F8CBDFCA65","sources":"Microsoft-Terms,Iris-Products,DCatAll-Products","filter":"+ClientType:StoreWeb","counts":"5,1,5"},"familyNames":{"Apps":"App","Books":"Book","Bundles":"Bundle","Devices":"Device","Fees":"Fee","Games":"Game","MusicAlbums":"Album","MusicTracks":"Song","MusicVideos":"Video","MusicArtists":"Artist","OperatingSystem":"Operating System","Software":"Software","Movies":"Movie","TV":"TV","CSV":"Gift Card","VideoActor":"Actor"}}' data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest" data-m='{"cN":"GlobalNav_Search_cont","cT":"Container","id":"c3c1c9c3m1r1a1","sN":3,"aN":"c1c9c3m1r1a1"}' aria-expanded="false"> <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search" name="query" placeholder="Search" data-m='{"cN":"SearchBox_nav","id":"n1c3c1c9c3m1r1a1","sN":1,"aN":"c3c1c9c3m1r1a1"}' data-toggle="tooltip" data-placement="right" title="Search" /> <button id="search" aria-label="Search" class="c-glyph" data-m='{"cN":"Search_nav","id":"n2c3c1c9c3m1r1a1","sN":2,"aN":"c3c1c9c3m1r1a1"}' data-bi-mto="true" aria-expanded="false" disabled="disabled"> <span role="presentation">Search</span> <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span> </button> <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group"> <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll" data-m='{"cN":"search suggestions_cont","cT":"Container","id":"c3c3c1c9c3m1r1a1","sN":3,"aN":"c3c1c9c3m1r1a1"}'></ul> <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox"> <li class="c-menu-item"> <span tabindex="-1">No results</span></li> </ul> </div> </form> <button data-m='{"cN":"cancel-search","pid":"Cancel Search","id":"nn4c1c9c3m1r1a1","sN":4,"aN":"c1c9c3m1r1a1"}' id="cancel-search" class="cancel-search" aria-label="Cancel Search"> <span>Cancel</span> </button> <div id="meControl" class="c-me" data-signinsettings='{"containerId":"meControl","enabled":true,"headerHeight":48,"debug":false,"extensibleLinks":[],"userData":{"idp":"msa","firstName":"","lastName":"","memberName":"","cid":"","authenticatedState":"3"},"rpData":{"preferredIdp":"msa","msaInfo":{"signInUrl":"https://app.vsaex.visualstudio.com/go/profile?mkt=en-us\u0026wt.mc_id=o~msft~vscom~signin\u0026_ga=1.106715523.1812220160.1467138837","signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","meUrl":"https://login.live.com/me.srf?wa=wsignin1.0"},"aadInfo":{"signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","appId":"","siteUrl":"","blockMsaFed":true}}}' data-m='{"cN":"GlobalNav_Account_cont","cT":"Container","id":"c5c1c9c3m1r1a1","sN":5,"aN":"c1c9c3m1r1a1"}'> <div class="msame_Header"> <div class="msame_Header_name st_msame_placeholder">Sign in</div> </div> </div> </div> </div> </div> </header> </div> </div> </div> <div id="wrapper" class="vscom-win-browser "> <div id="home" style="position:relative;top:-1px;"></div> <section class="avada-page-titlebar-wrapper" aria-label="Page Title Bar"> <div class="fusion-page-title-bar fusion-page-title-bar-breadcrumbs fusion-page-title-bar-center"> <div class="fusion-page-title-row"> <div class="fusion-page-title-wrapper"> <div class="fusion-page-title-captions"> </div> </div> </div> </div> </section> <script> window.performance && performance.mark && performance.mark("MainAreaBegin") </script> <main id="main" role="main" class="clearfix width-100" style="padding-left:0px;padding-right:0px;"> <div class="fusion-row" style="max-width:100%;"><div id="content" class="full-width"> <div id="post-27308" class="post-27308 page type-page status-publish hentry tag-realpage tag-realpage-tr-2"> <span class="entry-title rich-snippet-hidden">Visual Studio: IDE and Code Editor for Software Developers and Teams</span><span class="updated rich-snippet-hidden">2025-03-19T15:04:47-07:00</span> <div class="post-content post-visual-studio-ide-and-code-editor_visual-studio-ide-and-code-editor"> <div class="fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#463668;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="vscom-banner-modern clr-white with-title "> <div class="vscom-banner-modern-wrapper content-center banner-row" style="max-width: ; "> <div class="banner-title-wrapper"> <span class="banner-title" style="">The future is yours @Build</span> </div> <div class="banner-content-wrapper"> <p><span data-teams="true">Calling all developers, creators, and the AI innovators to join us in Seattle and refactor your skills, May 19-22</span></p> </div> <div class="banner-cta-wrapper"> <a data-bi-id="banner" data-bi-compnm="banner" data-bi-hn="The future is yours @Build" data-bi-name="Register today" class=" vscom-btn-primary vscom-btn-fill-grow fill-violet" target="_blank" rel="noopener" href="https://aka.ms/MSBuild_VS_Home" aria-label="">Register today</a> </div> </div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none copilot-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-background-position:center top;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:30px;--awb-padding-bottom:50px;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2024/05/VSCOM_hp_hero_bg.webp&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column hero-header" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:2.5rem;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-margin-bottom:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:;line-height:;">GitHub Copilot Free in Visual Studio</h1></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_2 1_2 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:15px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three subtitle" style="--awb-margin-top:0px;--awb-font-size:24px;"><h3 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;font-size:1em;--fontSize:24;line-height:;">No trial. No credit card required.<br /> Just your GitHub account.</h3></div><div class="fusion-text fusion-text-1 description-text"><p>Let Copilot Free and Visual Studio 2022 help you generate, refactor, and debug code, identify bugs and resolutions, optimize performance, and get context specific help throughout your coding workflow.</p> </div><div class="fusion-text fusion-text-2 vscom-btn-box"><p><a class="vscom-btn-primary vscom-btn-primary-violet-dark downloads-button vseng-track-downloads-dl-win-community Community vscom-btn-fill-grow fill-violet" target="_self" href="/thank-you-downloading-visual-studio/?sku=Community&amp;channel=Release&amp;version=VS2022&amp;source=VSLandingPage&amp;cid=2030&amp;passive=false" aria-label="Download Visual Studio Community 2022 for Free" data-bi-name="vs_win_download_community" data-bi-bhvr="40" data-bi-dlnm="Community 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" data-bi-id="github copilot hero" rel="noopener"><span class="vscom-link-text">Download Visual Studio</span></a><br /> <a class="vscom-btn-wire vscom-wire-black vscom-btn-fill-grow fill-violet" href="https://github.com/settings/copilot" target="_blank" rel="noopener" data-bi-id="github copilot hero"><span class="vscom-link-text">Get started for free</span></a></p> </div><div class="fusion-text fusion-text-3 vscom-btn-box"><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" href="https://visualstudio.microsoft.com/github-copilot/?utm_source=vscom-homepage&amp;utm_medium=web-hero&amp;utm_id=landing-page&amp;utm_campaign=vscom-hp-hero-to-copilot-lp-build-2024" data-bi-id="github copilot hero"><span class="vscom-link-text">Learn more about GitHub Copilot in Visual Studio </span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_2 1_2 fusion-flex-column image-col" style="--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="vscom-video-player-wrapper"><video data-bi-id="github copilot hero" data-bi-area="" class="vscom-video-player mejs__player" controls autoplay muted playinline loop preload="metadata" poster="" aria-label="Visual Studio 2022 with GitHub Copilot woven in"><source src="https://visualstudio.microsoft.com/wp-content/uploads/2024/09/VS_CopilotMenu_Website_Animation_r5.mp4"></video><meta property="name" content="Visual Studio 2022 with GitHub Copilot woven in"><meta name="description" content=""><meta name="thumbnailUrl" content=""><meta name="uploadDate" content=""></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-3 has-pattern-background has-mask-background vscom-home-hero vscom-modernization-home-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-background-position:center top;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last" style="--awb-bg-size:cover;--awb-margin-top:50px;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-title title fusion-title-3 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two" style="--awb-margin-bottom:30px;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;font-size:1em;--fontSize:50;line-height:1.2;">Meet the Visual Studio family</h2></div><div class="fusion-text fusion-text-4"><div class="hero-grid-inner-wrap"> <div class="hero-grid-column hero-grid-col-1 reveal reveal-1"> <div class="hero-grid-item hero-grid-header hero-grid-col-1 hero-grid-row-1"><img decoding="async" src="/wp-content/uploads/2021/10/Product-Icon.svg" alt="Visual Studio Win 2022 logo" width="96" height="95" /></div> <div class="hero-grid-item hero-grid-product hero-grid-col-1 hero-grid-row-2"> <div class="vs-hero-block"> <h3>Visual Studio</h3> <p><span class="hero-grid-subtitle"><span class="hero-grid-logos1"><img decoding="async" src="/wp-content/uploads/2022/03/Windows.svg" class="windows-img" alt="Microsoft Windows Logo" /></span></span></p> </div> </div> <div class="hero-grid-item hero-grid-description hero-grid-col-1 hero-grid-row-3" data-bi-id="Hero"> <p class="hero-grid-text">The most comprehensive IDE for .NET and C++ developers on Windows. Fully packed with a sweet array of tools and features to elevate and enhance every stage of software development.</p> </div> <div class="hero-bottom"> <div class="hero-grid-item hero-grid-info hero-grid-col-1 hero-grid-row-4"> <div class="vscom-link-wrapper"><a data-bi-id="Learn more" data-bi-area="hero" data-bi-name="hero_Visual Studio_Learn more" class="vscom-arrow-link" href="/#vs-section"><span class="vscom-link-text">Learn more</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div> <div class="hero-grid-item hero-grid-download hero-grid-col-1 hero-grid-row-5" data-bi-id="Hero"> <div class="vscom-dropdown-button vscom-btn-secondary vscom-btn-fill-grow fill-violet vscom-dropdown-button--modern-light-win"> <div class="vscom-dropdown-menu-container"> <button data-bi-id="Download Visual Studio" data-bi-area="hero" data-bi-name="hero_Visual Studio_Download Visual Studio" aria-expanded="false" class="toplink" aria-label="Download Visual Studio for Windows" tabindex="0"> <span class="vscom-dropdown-text">Download Visual Studio</span><i class="vscom-icon vscom-icon--chevron-down"></i> </button> <ul class="vscom-subnav vsopt-download-visual-studio" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Community 2022" data-bi-area="hero" data-bi-name="hero_Visual Studio_Community 2022" data-bi-bhvr="40" data-bi-dlnm="Community 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-community-2019 vseng-track-community-windows" aria-label="Community 2022 - download free for individual developers, academic uses, and open source" title="Free for individual developers, academic uses, and open source"> <span class="vscom-option-text">Community 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Professional 2022" data-bi-area="hero" data-bi-name="hero_Visual Studio_Professional 2022" data-bi-bhvr="40" data-bi-dlnm="Professional 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Professional&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-professional-2019 vseng-track-professional-windows" aria-label="Professional 2022 - download free trial for individual use" title="Free trial for individual use"> <span class="vscom-option-text">Professional 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Enterprise 2022" data-bi-area="hero" data-bi-name="hero_Visual Studio_Enterprise 2022" data-bi-bhvr="40" data-bi-dlnm="Enterprise 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Enterprise&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-enterprise-2019 vseng-track-downloads-windows-enterprise" aria-label="Enterprise 2022 - download free trial for organizations" title="Free trial for organizations"> <span class="vscom-option-text">Enterprise 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Preview 2022" data-bi-area="hero" data-bi-name="hero_Visual Studio_Preview 2022" role="menuitem" href="https://visualstudio.microsoft.com/vs/preview/#download-preview" class="sublink vseng-track-preview-windows" aria-label="Preview 2022 - download the free preview of Visual Studio" title="Early access to latest features"> <span class="vscom-option-text">Preview 2022</span> </a> </div> </li> </ul> </div> </div> </div> </div> </div> <div class="hero-grid-column hero-grid-col-2 reveal reveal-2"> <div class="hero-grid-item hero-grid-header hero-grid-col-2 hero-grid-row-1" data-bi-id="Hero"><img decoding="async" src="/wp-content/uploads/2019/09/vs-code-responsive-01-1.png" alt="Visual Studio Code logo" width="96" height="95" /></div> <div class="hero-grid-item hero-grid-product hero-grid-col-2 hero-grid-row-2"> <div class="vs-hero-block"> <h3>Visual Studio Code</h3> <p><span class="hero-grid-subtitle"><span class="hero-grid-logos1"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/03/Windows.svg" alt="Microsoft Windows Logo" class="windows-img" /><img decoding="async" src="/wp-content/uploads/2021/10/apple_logo.svg" alt="Apple macOS Logo" /><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/03/Linux.svg" alt="Linux Logo" /></span></span></p> </div> </div> <div class="hero-grid-item hero-grid-description hero-grid-col-2 hero-grid-row-3" data-bi-id="Hero"> <p class="hero-grid-text">A standalone source code editor that runs on Windows, macOS, and Linux. The top pick for JavaScript and web developers, with extensions to support just about any programming language.</p> </div> <div class="hero-bottom"> <div class="hero-grid-item hero-grid-info hero-grid-col-2 hero-grid-row-4" data-bi-id="Hero"> <div class="vscom-link-wrapper"><a data-bi-id="Learn more" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Learn more" class="vscom-arrow-link" href="/#vscode-section"><span class="vscom-link-text">Learn more</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <p><span class="vscom-hero-boxes-minit">By using Visual Studio Code you agree to its <a data-bi-id="license" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_license" href="https://code.visualstudio.com/License/" target="_blank" rel="noopener">license</a> &amp; <a data-bi-id="privacy statement" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_privacy statement" href="https://privacy.microsoft.com/privacystatement" target="_blank" rel="noopener">privacy statement</a></span></p> </div> <div class="hero-grid-item hero-grid-download hero-grid-col-2 hero-grid-row-5"> <div class="vscom-dropdown-button vscom-dropdown-button--code vscom-btn-secondary vscom-btn-fill-grow fill-blue vscom-dropdown-button--modern-light-code"> <div class="vscom-dropdown-menu-container"> <button data-bi-id="Download Visual Studio Code" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Download Visual Studio Code" aria-expanded="false" class="toplink" aria-label="download Visual Studio Code" tabindex="0"> <span class="vscom-dropdown-text">Download Visual Studio Code</span><i class="vscom-icon vscom-icon--chevron-down button-icon-right"></i> </button> <ul class="vscom-subnav vsopt-download-visual-studio" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Windows x64 User Installer" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Windows x64 User Installer" data-bi-bhvr="40" data-bi-dlnm="Windows x64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=win64user" class="sublink vseng-track-vscode-win-x64" aria-label="download Visual Studio Code for Windows x64 User Installer" title="" target="_blank"> <span class="vscom-option-text">Windows x64</span><span class="vscom-version-insert">User Installer</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Windows Arm64 User Installer" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Windows Arm64 User Installer" data-bi-bhvr="40" data-bi-dlnm="Windows Arm64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=win32arm64user" class="sublink vseng-track-vscode-win-Arm64" aria-label="download Visual Studio Code for Windows Arm64 User Installer" title="" target="_blank"> <span class="vscom-option-text">Windows Arm64</span><span class="vscom-version-insert">User Installer</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="macOS Universal Package" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_macOS Universal Package" data-bi-bhvr="40" data-bi-dlnm="macOS Universal Package" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=osx" class="sublink vseng-track-vscode-macOS Intel" aria-label="download Visual Studio Code for macOS Universal Package" title="" target="_blank"> <span class="vscom-option-text">macOS Universal</span><span class="vscom-version-insert">Package</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.deb" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Linux x64.deb" data-bi-bhvr="40" data-bi-dlnm="Linux x64.deb" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_deb" class="sublink vseng-track-vscode-linux-deb" aria-label="download Visual Studio Code for Linux (.deb)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.deb</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.rpm" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Linux x64.rpm" data-bi-bhvr="40" data-bi-dlnm="Linux x64.rpm" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_rpm" class="sublink vseng-track-vscode-linux-rpm" aria-label="download Visual Studio Code for Linux (.rpm)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.rpm</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="More" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_More" data-bi-bhvr="40" data-bi-dlnm="More" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/download" class="sublink vseng-track-vscode-more" aria-label="download more Visual Studio Code" title="" target="_blank"> <span class="vscom-option-text">More</span><span class="vscom-version-insert"></span> </a> </div> </li> </ul> </div> </div> </div> </div> </div> </div> </div><div class="fusion-text fusion-text-5 hero-foot-note" style="--awb-content-alignment:left;--awb-text-color:#191919;--awb-margin-top:22px;"><p><span class="vscom-link-wrapper vscom-link-wrapper--inline"><a href="/downloads/#picker" class="vscom-chevron-link"><i class="vscom-icon vscom-icon--Info"></i><span class="vscom-link-text">Wondering which tool is best for you? We can help.</span></a></span></p> </div><div class="fusion-clearfix"></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last fusion-layout-column--no-margins gradient-bg" style="--awb-bg-size:cover;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-clearfix"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none vs-home-section vs-left-image nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2022/11/VSCOM-Shape.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" id="vs-section" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:-50px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-4 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two vscom-swimlane-title" style="--awb-text-color:#191919;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;font-size:1em;text-transform:none;--fontSize:50;line-height:;">Visual Studio 2022</h2></div><div class="fusion-text fusion-text-6 vs-row" style="--awb-content-alignment:center;--awb-text-color:#191919;"><p><span>The Visual Studio IDE is a creative launching pad that you can use to edit, debug, and build code, and then publish an app. Over and above the standard editor and debugger that most IDEs provide, Visual Studio includes compilers, code completion tools, graphical designers, and many more features to enhance the software development process.</span></p> <div class="vscom-btn-box--center"><div class="vscom-dropdown-button vscom-btn-secondary vscom-btn-fill-grow fill-violet vscom-dropdown-button--modern-light-win"> <div class="vscom-dropdown-menu-container"> <button data-bi-id="Download" data-bi-area="body" data-bi-name="body_Visual Studio 2022_Download" aria-expanded="false" class="toplink" aria-label="Download Visual Studio for Windows" tabindex="0"> <span class="vscom-dropdown-text">Download</span><i class="vscom-icon vscom-icon--chevron-down"></i> </button> <ul class="vscom-subnav vsopt-download-visual-studio" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Community 2022" data-bi-area="body" data-bi-name="body_Visual Studio 2022_Community 2022" data-bi-bhvr="40" data-bi-dlnm="Community 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-community-2019 vseng-track-community-windows" aria-label="Community 2022 - download free for individual developers, academic uses, and open source" title="Free for individual developers, academic uses, and open source"> <span class="vscom-option-text">Community 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Professional 2022" data-bi-area="body" data-bi-name="body_Visual Studio 2022_Professional 2022" data-bi-bhvr="40" data-bi-dlnm="Professional 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Professional&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-professional-2019 vseng-track-professional-windows" aria-label="Professional 2022 - download free trial for individual use" title="Free trial for individual use"> <span class="vscom-option-text">Professional 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Enterprise 2022" data-bi-area="body" data-bi-name="body_Visual Studio 2022_Enterprise 2022" data-bi-bhvr="40" data-bi-dlnm="Enterprise 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Enterprise&#038;channel=Release&#038;version=VS2022&#038;source=VSLandingPage&#038;cid=2030&#038;passive=false" class="sublink vsopt-enterprise-2019 vseng-track-downloads-windows-enterprise" aria-label="Enterprise 2022 - download free trial for organizations" title="Free trial for organizations"> <span class="vscom-option-text">Enterprise 2022</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Preview 2022" data-bi-area="body" data-bi-name="body_Visual Studio 2022_Preview 2022" role="menuitem" href="https://visualstudio.microsoft.com/vs/preview/#download-preview" class="sublink vseng-track-preview-windows" aria-label="Preview 2022 - download the free preview of Visual Studio" title="Early access to latest features"> <span class="vscom-option-text">Preview 2022</span> </a> </div> </li> </ul> </div> </div></div> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_2_3 2_3 fusion-flex-column fusion-flex-align-self-flex-end reveal" style="--awb-bg-size:cover;--awb-width-large:66.6666666667%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><span class=" fusion-imageframe imageframe-none imageframe-1 hover-type-none fusion-animated" style="width:100%;max-width:px;" data-animationType="slideInDown" data-animationDuration="0.3" data-animationOffset="top-into-view"><img decoding="async" alt="Visual Studio 2022 screenshot" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/11/VisualStudio.webp" class="img-responsive wp-image-200924 lazyload "/></span></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_1_3 1_3 fusion-flex-column fusion-flex-align-self-flex-end vs-padding-right" style="--awb-bg-size:cover;--awb-width-large:33.3333333333%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-7"><h3>Code faster<br /> Work smarter</h3> <p>Visual Studio is the fastest IDE for productivity. Target any platform, any device. Build any type of application. Work together in real time. Diagnose and stop problems before they happen. It makes the stuff you do every day more fluid and responsive.</p> <div class="vscom-link-wrapper"><a data-bi-id="product-section vs ide" class="vscom-arrow-link clr-violet" href="/vs"><span class="vscom-link-text">Discover Visual Studio</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none vs-home-section nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:150px;--awb-padding-top-medium:120px;--awb-padding-bottom-medium:100px;--awb-padding-top-small:100px;--awb-padding-bottom-small:100px;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2023/10/VSCODE-Shape-3.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" id="vscode-section" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-5 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two vscom-swimlane-title" style="--awb-text-color:#191919;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;font-size:1em;text-transform:none;--fontSize:50;line-height:;">Visual Studio Code</h2></div><div class="fusion-text fusion-text-8 code-row" style="--awb-content-alignment:center;--awb-text-color:#191919;"><p>Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages and runtimes (such as C++, C#, Java, Python, PHP, Go, .NET).</p> <div class="vscom-btn-box--center"><div class="vscom-dropdown-button vscom-dropdown-button--code vscom-btn-secondary vscom-btn-fill-grow fill-blue vscom-dropdown-button--modern-light-code"> <div class="vscom-dropdown-menu-container"> <button data-bi-id="Download" data-bi-area="body" data-bi-name="body_Visual Studio Code_Download" aria-expanded="false" class="toplink" aria-label="download Visual Studio Code" tabindex="0"> <span class="vscom-dropdown-text">Download</span><i class="vscom-icon vscom-icon--chevron-down button-icon-right"></i> </button> <ul class="vscom-subnav vsopt-download-visual-studio" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Windows x64 User Installer" data-bi-area="body" data-bi-name="body_Visual Studio Code_Windows x64 User Installer" data-bi-bhvr="40" data-bi-dlnm="Windows x64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=win64user" class="sublink vseng-track-vscode-win-x64" aria-label="download Visual Studio Code for Windows x64 User Installer" title="" target="_blank"> <span class="vscom-option-text">Windows x64</span><span class="vscom-version-insert">User Installer</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Windows Arm64 User Installer" data-bi-area="body" data-bi-name="body_Visual Studio Code_Windows Arm64 User Installer" data-bi-bhvr="40" data-bi-dlnm="Windows Arm64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=win32arm64user" class="sublink vseng-track-vscode-win-Arm64" aria-label="download Visual Studio Code for Windows Arm64 User Installer" title="" target="_blank"> <span class="vscom-option-text">Windows Arm64</span><span class="vscom-version-insert">User Installer</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="macOS Universal Package" data-bi-area="body" data-bi-name="body_Visual Studio Code_macOS Universal Package" data-bi-bhvr="40" data-bi-dlnm="macOS Universal Package" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=osx" class="sublink vseng-track-vscode-macOS Intel" aria-label="download Visual Studio Code for macOS Universal Package" title="" target="_blank"> <span class="vscom-option-text">macOS Universal</span><span class="vscom-version-insert">Package</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.deb" data-bi-area="body" data-bi-name="body_Visual Studio Code_Linux x64.deb" data-bi-bhvr="40" data-bi-dlnm="Linux x64.deb" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_deb" class="sublink vseng-track-vscode-linux-deb" aria-label="download Visual Studio Code for Linux (.deb)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.deb</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.rpm" data-bi-area="body" data-bi-name="body_Visual Studio Code_Linux x64.rpm" data-bi-bhvr="40" data-bi-dlnm="Linux x64.rpm" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_rpm" class="sublink vseng-track-vscode-linux-rpm" aria-label="download Visual Studio Code for Linux (.rpm)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.rpm</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="More" data-bi-area="body" data-bi-name="body_Visual Studio Code_More" data-bi-bhvr="40" data-bi-dlnm="More" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/download" class="sublink vseng-track-vscode-more" aria-label="download more Visual Studio Code" title="" target="_blank"> <span class="vscom-option-text">More</span><span class="vscom-version-insert"></span> </a> </div> </li> </ul> </div> </div></div> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-10 fusion_builder_column_2_3 2_3 fusion-flex-column fusion-flex-align-self-flex-end reveal vs-mac-block-order" style="--awb-bg-size:cover;--awb-width-large:66.6666666667%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><span class=" fusion-imageframe imageframe-none imageframe-2 hover-type-none fusion-animated" style="width:100%;max-width:px;" data-animationType="slideInDown" data-animationDuration="0.3" data-animationOffset="top-into-view"><img decoding="async" alt="Screenshot for Visual Studio Code" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/11/VSCode.webp" class="img-responsive wp-image-200926 lazyload "/></span></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-11 fusion_builder_column_1_3 1_3 fusion-flex-column fusion-flex-align-self-flex-end" style="--awb-bg-size:cover;--awb-width-large:33.3333333333%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-9"><h3>Code editing. Redefined</h3> <p>Debug code right from the editor. Launch or attach to your running apps and debug with break points, call stacks, and an interactive console.</p> <div class="vscom-link-wrapper"><a data-bi-id="product-section vs code" class="vscom-arrow-link clr-violet" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" target="_blank" rel="nofollow noopener"><span class="vscom-link-text">Learn more</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container vscom-slider--outer-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-right:0px;--awb-padding-left:0px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-12 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div role="region" class="home-general-slider bss-slides vscom-slider vscom-slider--modern-full" aria-label="home general slider"> <div class="vscom-slide-background-accent-wrapper"> <div class="vscom-slide-accent vscom-slide-background-accent vscom-slide-number-0 bss-show" style="background-image: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/VSHubCarouselBackground.webp);"></div> </div> <div class="vscom-slider-wrapper"> <div class="vscom-slider-slides-wrapper" aria-live="polite"> <style type="text/css" scoped="scoped">.vscom-slider .vscom-slide-0 { background: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/VSHubCarouselBackground.webp); }</style> <article data-title="Visual Studio Hub is here" class="vscom-slide-0 vscom-slider-slide bss-show vscom-slider-slide--light-text " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/VSHubCarouseImage.webp" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/VSHubCarouseImage.webp" alt="Visual Studio Hub image"/> <div class="vscom-slide-caption" style="background-image: url('');"> <div class="vscom-slide-text"> <p><span class="vscom-tag vscom-tag-purple">ANNOUNCEMENT</span></p> <h3>Visual Studio Hub is here!</h3> <p style="padding-bottom: 1rem;">Visual Studio Hub is your new one-stop destination for information on Visual Studio product updates, events, and most recent content.</p> </div> <div class="vscom-slide-readmore-wrapper"> <a os_downloads="no" data-bi-compnm="slider" data-bi-id="Check it out" data-bi-area="slider" data-bi-ecn="Check it out" data-bi-name="Check it out" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse " href="/hub/" tabindex="0" target="_self" >Check it out</a> </div> </div> </article> </div> <a class="bss-pause" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-name="slider pause" class="bss-pause" role="button" aria-label="Pause slideshow" tabindex="0"> <span class="pause fabric-icon vscom-icon vscom-icon--Pause"></span> </a> </div> <div class="vscom-slider-text-accent-wrapper"> <div class="vscom-slide-accent vscom-slide-text-accent vscom-slide-number-0 bss-show"> <p><span class="vscom-tag vscom-tag-purple">ANNOUNCEMENT</span></p> <h3>Visual Studio Hub is here!</h3> <p style="padding-bottom: 1rem;">Visual Studio Hub is your new one-stop destination for information on Visual Studio product updates, events, and most recent content.</p> <div class="vscom-slide-readmore-wrapper"><a os_downloads="no" data-bi-compnm="slider" data-bi-id="Check it out" data-bi-area="slider" data-bi-ecn="Check it out" data-bi-name="Check it out" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse " href="/hub/" tabindex="0" target="_self" >Check it out</a></div></div> </div> <div class="vscom-slider-nav-wrapper"> <ul class="vscom-slider-jump-list"> <li aria-setsize="1" value="true" aria-posinset="1" class="vscom-slider-jump-item"><a data-slide-position="1" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-name="slider jump link 1" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Visual Studio Hub is here" href="javascript:void(0)" aria-label="View Visual Studio Hub is here slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Visual Studio Hub is here</span></div></a></li> </ul> </div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:70px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-13 fusion_builder_column_1_1 1_1 fusion-flex-column vs-ext-wrapper" style="--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="width:calc( 100% + ) !important;max-width:calc( 100% + ) !important;margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_2 1_2 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:15px;--awb-spacing-right-large:20px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-two vscom-extensions" style="--awb-margin-bottom:30px;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;font-size:1em;text-transform:none;--fontSize:50;line-height:1;">Take it further with extensions</h2></div><div class="fusion-text fusion-text-10 vscom-extensions-subcontent" style="--awb-content-alignment:left;"><p>Extensions are add-ons that customize and enhance Visual Studio, including extra settings, features, or uses for existing tools. With thousands of extensions on the marketplace, you’ve got options galore to increase your productivity and cater to your workflow.</p> </div><div class="fusion-text fusion-text-11" style="--awb-content-alignment:left;"><div class="vscom-link-wrapper"><a data-bi-id="Explore Extensions" class="vscom-arrow-link clr-violet" href="https://marketplace.visualstudio.com/" target="_blank" rel="nofollow noopener"><span class="vscom-link-text">Explore Extensions</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-14 fusion_builder_column_1_1 1_1 fusion-flex-column vs-ext-wrapper" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="vscom-extension-cards-background-wrapper"><div class="vscom-extension-cards-background-inner-wrapper"> <div class="vscom-extension-cards-wrapper" > <div class="vscom-extension-card reveal reveal-box1 "> <div class="vs-extension-box-wrapper header-1"> <div class="service-icon"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/GitHub-actions-icon.svg" alt="GitHub actions icon" class="img-responsive vscom-not-lazy-image wp-image-218395" width="98" height="98" > </span> </div> <div class="service-box-content-title"> <span>GitHub Actions</span> </div> <div class="service-box-content-rating"> <span class="clip-star" ratingvalue=""></span> <span class="service-box-installs-count"><span class="install-number"></span>Installs</span> </div> </div> <div class="extension-description footer-1"> <p>A window that provides a view of GitHub Actions for the current repo of the opened solution in Visual Studio. Provided by @timheuer</p> <div class="vscom-link-wrapper"> <a data-bi-id="Get extension" data-bi-area="extension card" data-bi-name="extension card_GitHub Actions_Get extension" class="vscom-arrow-link " href="https://marketplace.visualstudio.com/items?itemName=TimHeuer.GitHubActionsVS" aria-label="Get GitHub Actions" target="_blank" rel="nofollow noopener" > <span class="vscom-link-text">Get extension</span> <i class="vscom-icon vscom-icon--arrow-right"></i> </a> </div> </div> </div><div class="vscom-extension-card reveal reveal-box2 "> <div class="vs-extension-box-wrapper header-2"> <div class="service-icon"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/Markdown-Editor-icon.svg" alt="Markdown Editor icon" class="img-responsive vscom-not-lazy-image wp-image-218396" width="98" height="98" > </span> </div> <div class="service-box-content-title"> <span>Markdown Editor v2</span> </div> <div class="service-box-content-rating"> <span class="clip-star" ratingvalue=""></span> <span class="service-box-installs-count"><span class="install-number"></span>Installs</span> </div> </div> <div class="extension-description footer-2"> <p>A full featured Markdown editor with live preview and syntax highlighting. Supports GitHub flavored Markdown.</p> <div class="vscom-link-wrapper"> <a data-bi-id="Get Extension" data-bi-area="extension card" data-bi-name="extension card_Markdown Editor v2_Get Extension" class="vscom-arrow-link " href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor2" aria-label="Get Markdown Editor v2" target="_blank" rel="nofollow noopener" > <span class="vscom-link-text">Get Extension</span> <i class="vscom-icon vscom-icon--arrow-right"></i> </a> </div> </div> </div><div class="vscom-extension-card reveal reveal-box3 "> <div class="vs-extension-box-wrapper header-3"> <div class="service-icon"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/08/ThemePack_Icon.svg" alt="Visual Studio Theme Pack icon" class="img-responsive vscom-not-lazy-image wp-image-209237" width="98" height="98" > </span> </div> <div class="service-box-content-title"> <span>Visual Studio Theme Pack</span> </div> <div class="service-box-content-rating"> <span class="clip-star" ratingvalue=""></span> <span class="service-box-installs-count"><span class="install-number"></span>Installs</span> </div> </div> <div class="extension-description footer-3"> <p>Collection of popular themes, now available for Visual Studio.</p> <div class="vscom-link-wrapper"> <a data-bi-id="Learn more" data-bi-area="extension card" data-bi-name="extension card_Visual Studio Theme Pack_Learn more" class="vscom-arrow-link " href="https://marketplace.visualstudio.com/items?itemName=idex.vsthemepack" target="_blank" rel="noopener" > <span class="vscom-link-text">Learn more</span> <i class="vscom-icon vscom-icon--arrow-right"></i> </a> </div> </div> </div><div class="vscom-extension-card reveal reveal-box4 "> <div class="vs-extension-box-wrapper header-4"> <div class="service-icon"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/SQLite-SQL-Server-icon.svg" alt="SQLite SQL Server icon" class="img-responsive vscom-not-lazy-image wp-image-218397" width="98" height="98" > </span> </div> <div class="service-box-content-title"> <span>SQLite and SQL Server Compact Toolbox</span> </div> <div class="service-box-content-rating"> <span class="clip-star" ratingvalue=""></span> <span class="service-box-installs-count"><span class="install-number"></span>Installs</span> </div> </div> <div class="extension-description footer-4"> <p>This extension adds several features to help your embedded database development efforts.</p> <div class="vscom-link-wrapper"> <a data-bi-id="Get Extension" data-bi-area="extension card" data-bi-name="extension card_SQLite and SQL Server Compact Toolbox_Get Extension" class="vscom-arrow-link " href="https://marketplace.visualstudio.com/items?itemName=ErikEJ.SQLServerCompactSQLiteToolbox" aria-label="Get SQLite and SQL Server Compact Toolbox" target="_blank" rel="nofollow noopener" > <span class="vscom-link-text">Get Extension</span> <i class="vscom-icon vscom-icon--arrow-right"></i> </a> </div> </div> </div> </div> </div></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-8 fusion-flex-container has-pattern-background has-mask-background vs-subscriptions-section nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:70px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-15 fusion_builder_column_2_5 2_5 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:40%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><span class=" fusion-imageframe imageframe-none imageframe-3 hover-type-none vscom-left-move"><img decoding="async" alt="Illustration for Visual Studio Subscriptions" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/11/Launch.svg" class="img-responsive wp-image-200233 lazyload "/></span></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-16 fusion_builder_column_3_5 3_5 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:60%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-two" style="--awb-text-color:#191919;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;font-size:1em;text-transform:none;--fontSize:50;line-height:;">Visual Studio Subscriptions</h2></div><div class="fusion-text fusion-text-12 fusion-text-no-margin" style="--awb-content-alignment:left;--awb-text-color:#191919;--awb-margin-top:10px;--awb-margin-bottom:20px;"><p>Get more from Visual Studio with a subscription! Get access to platforms like Azure, training, and more for your team.</p> <ul> <li>Latest and past versions of Visual Studio</li> <li>Discounts on Azure services when used for dev/test purposes</li> <li>DevOps services to support your development workflow</li> <li>Monthly Azure credits to learn, experiment, and prototype</li> <li>Access Microsoft’s entire catalog of software for dev/test use</li> <li>Training resources like Pluralsight and LinkedIn Learning</li> <li>Technical support incidents for your dev/test issues</li> </ul> </div><div class="fusion-text fusion-text-13"><div class="vscom-link-wrapper"><a data-bi-id="Explore Options" class="vscom-arrow-link clr-violet" href="https://visualstudio.microsoft.com/subscriptions/"><span class="vscom-link-text">Explore options</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-9 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none vscom-icon-cloud nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:70px;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2022/11/vscom-icon-cloud-bg.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-17 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="vscom-icon-cloud-body "> <div class="vscom-swimlane--fifty-fifty vscom-body--fit"> <h2>A product family that’s earned your trust</h2> <p>Millions of developers from teams and organizations of all sizes rely on Visual Studio products to make their software.</p> </div> <div class="vscom-swimlane--fifty-fifty reveal"> <div class="icon-cloud-inner"> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/en/customers/story/845185-academy-motion-picture-arts-sciences-media-entertainment-azure" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Academy of Motion Picture Arts and Sciences"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/academy.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-218995" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/1338975042530565844-dc-water-government-azure-en-united-states" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="DC Water"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/dc-water.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-200084" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/787157-chipotle-retailers-azure" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Chipotle"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com//wp-content/uploads/2023/01/chipotle.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-0" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/1769628185480172641-lumen-technologies-inc-azure-telecommunications-en-united-states" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Lumen Technologies"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/lumen.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-218998" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/1650265213028177234-gm-cloud-based-developer-services-from-microsoft" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="GM"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/gen-motors.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-218997" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/816181-ge-aviation-manufacturing-azure" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="General Electric Aviation"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/ge-aviation.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-200089" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/1618016285842230938-stopwatch-leverages-azure-visual-studio-net-core-to-deliver-omni-commerce-solution" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Stopwatch"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/stopwatch.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-218996" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/857535-pegasusone-swunmath-microsoft-us" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Pegasus One"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/pegasus-one.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-200090" width="190" height="180" > </span> </div> </a> </div> </div> <div class="vscom-icon-cloud-icon "> <div class="cloud-icon-inner"> <a href="https://www.microsoft.com/customers/story/1387036184769963414-rolls-royce" class="cloud-icon-link" target="_blank" rel="nofollow,noreferrer,noopener" aria-label="Rolls Royce"> <div class="cloud-icon-link-inner"> <span class="fusion-imageframe imageframe-none hover-type-none"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/rolls-royce.png" alt="" class="img-responsive vscom-not-lazy-image wp-image-200092" width="190" height="180" > </span> </div> </a> </div> </div> </div> </div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-10 fusion-flex-container has-pattern-background has-mask-background vscom-slider--outer-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-right:0px;--awb-padding-left:0px;--awb-margin-top:50px;--awb-margin-bottom:50px;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-18 fusion_builder_column_1_1 1_1 fusion-flex-column fusion-flex-align-self-center" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column"><div class="fusion-title title fusion-title-8 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two" style="--awb-text-color:#191919;--awb-margin-bottom:20px;--awb-font-size:50px;"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;font-size:1em;text-transform:none;--fontSize:50;line-height:;">What’s new from the Visual Studio team</h2></div><div role="region" class="devblogs-slider bss-slides vscom-slider vscom-slider--modern-devblogs-posts" aria-label="devblogs slider"> <div class="vscom-slider-wrapper"> <div class="vscom-slider-slides-wrapper" aria-live="polite"> <style type="text/css" scoped="scoped"></style> <article data-title="Loading Posts..." class="devblogs-post vscom-slide-0 vscom-slider-slide bss-show "> <div class="vscom-slide-caption"> <a href="javascript:void(0)" class="vscom-devblogs-link" target="_blank" data-bi-compnm="slider" data-bi-id="slider blog" tabindex="0"> <div class="vscom-slide-text"> <div class="vscom-devblogs-slide-header"> <div class="vscom-devblogs-slide-icon"> <img decoding="async" class="vscom-devblogs-slide-authoricon" src="" alt="" /> </div> <div class="vscom-devblogs-slide-info"> <p class="vscom-devblogs-slide-authorname">[...]</p> <p class="vscom-devblogs-slide-postdate">[...]</p> </div> </div> <div class="vscom-devblogs-slide-content"> <div class="vscom-devblogs-slide-title-wrap disp-8"> <h3 class="vscom-devblogs-slide-title"> Loading Posts, Please Wait... </h3> </div> <div class="vscom-devblogs-slide-excerpt"> [...] </div> </div> </div> </a> </div> </article><style type="text/css" scoped="scoped"></style> <article data-title="Loading Posts..." class="devblogs-post vscom-slide-1 vscom-slider-slide "> <div class="vscom-slide-caption"> <a href="javascript:void(0)" class="vscom-devblogs-link" target="_blank" data-bi-compnm="slider" data-bi-id="slider blog" tabindex="-1"> <div class="vscom-slide-text"> <div class="vscom-devblogs-slide-header"> <div class="vscom-devblogs-slide-icon"> <img decoding="async" class="vscom-devblogs-slide-authoricon" src="" alt="" /> </div> <div class="vscom-devblogs-slide-info"> <p class="vscom-devblogs-slide-authorname">[...]</p> <p class="vscom-devblogs-slide-postdate">[...]</p> </div> </div> <div class="vscom-devblogs-slide-content"> <div class="vscom-devblogs-slide-title-wrap disp-8"> <h3 class="vscom-devblogs-slide-title"> Loading Posts, Please Wait... </h3> </div> <div class="vscom-devblogs-slide-excerpt"> [...] </div> </div> </div> </a> </div> </article><style type="text/css" scoped="scoped"></style> <article data-title="Loading Posts..." class="devblogs-post vscom-slide-2 vscom-slider-slide "> <div class="vscom-slide-caption"> <a href="javascript:void(0)" class="vscom-devblogs-link" target="_blank" data-bi-compnm="slider" data-bi-id="slider blog" tabindex="-1"> <div class="vscom-slide-text"> <div class="vscom-devblogs-slide-header"> <div class="vscom-devblogs-slide-icon"> <img decoding="async" class="vscom-devblogs-slide-authoricon" src="" alt="" /> </div> <div class="vscom-devblogs-slide-info"> <p class="vscom-devblogs-slide-authorname">[...]</p> <p class="vscom-devblogs-slide-postdate">[...]</p> </div> </div> <div class="vscom-devblogs-slide-content"> <div class="vscom-devblogs-slide-title-wrap disp-8"> <h3 class="vscom-devblogs-slide-title"> Loading Posts, Please Wait... </h3> </div> <div class="vscom-devblogs-slide-excerpt"> [...] </div> </div> </div> </a> </div> </article><style type="text/css" scoped="scoped"></style> <article data-title="Loading Posts..." class="devblogs-post vscom-slide-3 vscom-slider-slide "> <div class="vscom-slide-caption"> <a href="javascript:void(0)" class="vscom-devblogs-link" target="_blank" data-bi-compnm="slider" data-bi-id="slider blog" tabindex="-1"> <div class="vscom-slide-text"> <div class="vscom-devblogs-slide-header"> <div class="vscom-devblogs-slide-icon"> <img decoding="async" class="vscom-devblogs-slide-authoricon" src="" alt="" /> </div> <div class="vscom-devblogs-slide-info"> <p class="vscom-devblogs-slide-authorname">[...]</p> <p class="vscom-devblogs-slide-postdate">[...]</p> </div> </div> <div class="vscom-devblogs-slide-content"> <div class="vscom-devblogs-slide-title-wrap disp-8"> <h3 class="vscom-devblogs-slide-title"> Loading Posts, Please Wait... </h3> </div> <div class="vscom-devblogs-slide-excerpt"> [...] </div> </div> </div> </a> </div> </article> </div> <a class="bss-pause" data-bi-compnm="slider" data-bi-id="slider blog" data-bi-name="slider pause" role="button" aria-label="Pause slideshow" tabindex="0"> <span data-bi-name="Pause" class="pause fabric-icon vscom-icon vscom-icon--Pause"></span> </a> </div> <div class="vscom-slider-nav-wrapper"> <ul class="vscom-slider-jump-list"> <li aria-setsize="4" value="true" aria-posinset="1" class="vscom-slider-jump-item"><a data-slide-position="1" data-bi-compnm="slider" data-bi-id="slider blog" data-bi-name="slider jump link 1" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Loading Posts..." href="javascript:void(0)" aria-label="View Loading Posts... slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Loading Posts...</span></div></a></li><li aria-setsize="4" value="true" aria-posinset="2" class="vscom-slider-jump-item"><a data-slide-position="2" data-bi-compnm="slider" data-bi-id="slider blog" data-bi-name="slider jump link 2" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Loading Posts..." href="javascript:void(0)" aria-label="View Loading Posts... slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Loading Posts...</span></div></a></li><li aria-setsize="4" value="true" aria-posinset="3" class="vscom-slider-jump-item"><a data-slide-position="3" data-bi-compnm="slider" data-bi-id="slider blog" data-bi-name="slider jump link 3" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Loading Posts..." href="javascript:void(0)" aria-label="View Loading Posts... slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Loading Posts...</span></div></a></li><li aria-setsize="4" value="true" aria-posinset="4" class="vscom-slider-jump-item"><a data-slide-position="4" data-bi-compnm="slider" data-bi-id="slider blog" data-bi-name="slider jump link 4" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Loading Posts..." href="javascript:void(0)" aria-label="View Loading Posts... slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Loading Posts...</span></div></a></li> </ul> </div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-11 fusion-flex-container has-pattern-background has-mask-background vs-footer-downloads-sm nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#3b2e58;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-19 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-14 hero-grid--footer"><div class="hero-grid-inner-wrap"> <div class="hero-grid-column hero-grid-col-1"> <div class="hero-grid-item hero-grid-header hero-grid-col-1 hero-grid-row-1"><img decoding="async" src="/wp-content/uploads/2021/10/Product-Icon.svg" alt="Visual Studio Win 2022 logo" width="96" height="95" /></div> <div class="hero-grid-item hero-grid-product hero-grid-col-1 hero-grid-row-2"> <div class="vs-hero-block"> <h3 class="vscom-footer-downloads-title title-heading-tag">Visual Studio</h3> <p><span class="hero-grid-subtitle"><span class="hero-grid-logos1"><i class="vscom-icon vscom-icon--WindowsLogo"></i></span></span></p> </div> </div> <div data-bi-id="Footer download" class="fusion-alignleft downloads-button-wrapper"><a href="/thank-you-downloading-visual-studio/?sku=Community&amp;channel=Release&amp;version=VS2022&amp;source=VSLandingPage&amp;passive=false&amp;cid=2030" target="_self" class="vscom-btn-primary fill-violet grow-ellipse mseng-track-win" rel="noopener" data-bi-id="Footer download" data-bi-name="Free Download">Free download</a></div> </div> <div class="hero-grid-column hero-grid-col-2"> <div class="hero-grid-item hero-grid-header hero-grid-col-2 hero-grid-row-1" data-bi-id="Hero"><img decoding="async" src="/wp-content/uploads/2019/09/vs-code-responsive-01-1.png" alt="Visual Studio Code logo" width="96" height="95" /></div> <div class="hero-grid-item hero-grid-product hero-grid-col-2 hero-grid-row-2"> <div class="vs-hero-block"> <h3 class="vscom-footer-downloads-title title-heading-tag">Visual Studio Code</h3> <p><span class="hero-grid-logos1"><i class="vscom-icon vscom-icon--WindowsLogo"></i><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/09/Apple_Opaque.svg" alt="Apple macOS Logo" class="x-hidden-focus" /><i class="vscom-icon vscom-icon--LinuxLogo32"></i></span></p> </div> </div> <div data-bi-id="Footer download" class="fusion-alignleft downloads-button-wrapper"><a href="https://go.microsoft.com/fwlink/?LinkID=534107&amp;wt.mc_id=DX_841432&amp;sku=codewin" target="_self" class="vscom-btn-primary fill-blue grow-ellipse mseng-track-win" rel="noopener" data-bi-id="Footer download" data-bi-name="Free Download">Free download</a></div> </div> </div> </div></div></div></div></div> </div> </div> </div> </div> <!-- fusion-row --> </main> <!-- #main --> <script>window.performance && performance.mark && performance.mark("MainAreaEnd")</script> </div> <!-- wrapper --> <div id="social-experiment-footer" class="vscom-social-media vscom-social-media--dividers"> <div class="vscom-social-media-inner"> <div class="vscom-social-media-column flex-start"> <span class="vscom-social-media-text">Follow us</span> <a data-bi-id="footer-follow-social-media" data-bi-name="twitter-x" href="https://twitter.com/visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/X-logo.svg" alt="Visual Studio on Twitter" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="facebook" href="https://www.facebook.com/visualstudio/" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Facebook.svg" alt="Visual Studio on Facebook" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="linkedin" href="https://www.linkedin.com/showcase/microsoft-visual-studio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Linkedin.svg" alt="Visual Studio on Linkedin" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="youtube" href="https://www.youtube.com/user/VisualStudio/featured" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Youtube.svg" alt="Visual Studio on Youtube" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="tiktok" href="https://www.tiktok.com/@visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/10/Tiktok.svg" alt="Visual Studio on TikTok" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="bluesky" href="https://bsky.app/profile/visualstudio.com" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2025/03/footer-social-bluesky.svg" alt="Visual Studio on Bluesky" /></a> </div> <div class="vscom-social-media-column flex-end vscom-social-media-column--col-sm"> <a data-bi-id="footer-follow-sites" href="https://visualstudio.microsoft.com/dev-essentials/">Dev Essentials</a> <span class="vscom-media-link-divider"></span> <a data-bi-id="footer-follow-sites" href="https://developercommunity.microsoft.com/VisualStudio" target="_blank" rel="nofollow noopener">Developer Community</a> <span class="vscom-media-link-divider"></span> </div> <div class="vscom-social-media-column flex-end"> <span class="vscom-social-media-text">Blogs:</span> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/visualstudio" target="_blank" rel="nofollow noopener">Visual Studio</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/dotnet" target="_blank" rel="nofollow noopener">.NET</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/cppblog" target="_blank" rel="nofollow noopener">C++</a> </div> </div> </div> <a class="fusion-one-page-text-link fusion-page-load-link"></a> <!-- W3TC-include-js-head --> <!-- Fix for Multi Language picker options loading on 404 page --> <script>var domReadyScripts =[{"handle":"vscom","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-core\/assets\/js\/vscom.min.js","ver":1694020635,"deps":["classlist-polyfill"]},{"handle":"classlist-polyfill","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/themes\/Avada-Child-Theme\/assets\/js\/classList.min.js","ver":1667498206},{"handle":"vscom-video-player-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/vscom-video-player.min.js","ver":1667498195,"deps":["object-fit-polyfill-js"]},{"handle":"object-fit-polyfill-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/ofi.min.js","ver":1667498194},{"handle":"media-element-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/video-player\/mediaelement.min.js","ver":1667498194},{"handle":"vscom-slider-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/slider\/better-simple-slideshow.min.js","ver":1739904767,"deps":["hammer-js"]},{"handle":"hammer-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/slider\/hammer.min.js","ver":1667498194},{"handle":"slider-devblogs-posts-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/slider\/slider-devblogs-posts.min.js","ver":1702925116}];</script><script id="vscom-dom-ready-inline" type="text/javascript">var VSCOM_Language = {"dropdown":"<select id=\"js-lang-picker\" class=\"vs-language-picker\" aria-label=\"Select Language\"><option value=\"https:\/\/visualstudio.microsoft.com\" selected=\"selected\">English<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hans\/\" data-lang-code=\"zh-hans\">\u7b80\u4f53\u4e2d\u6587 (Chinese, Simplified)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hant\/\" data-lang-code=\"zh-hant\">\u7e41\u9ad4\u4e2d\u6587 (Chinese, Traditional)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/fr\/\" data-lang-code=\"fr\">Fran\u00e7ais<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/de\/\" data-lang-code=\"de\">Deutsch<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/it\/\" data-lang-code=\"it\">Italiano<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ja\/\" data-lang-code=\"ja\">\u65e5\u672c\u8a9e (Japanese)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ru\/\" data-lang-code=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/es\/\" data-lang-code=\"es\">Espa\u00f1ol<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/cs\/\" data-lang-code=\"cs\">\u010ce\u0161tina<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ko\/\" data-lang-code=\"ko\">\ud55c\uad6d\uc5b4 (Korean)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pl\/\" data-lang-code=\"pl\">polski<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pt-br\/\" data-lang-code=\"pt-br\">Portugu\u00eas (Brasil)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/tr\/\" data-lang-code=\"tr\">T\u00fcrk\u00e7e<\/option><\/select>"};var microsoftUhfSettings = {"loginUrl":"https:\/\/app.vsaex.visualstudio.com\/go\/profile?wt.mc_id=o~msft~vscom~vssignin","logoutUrl":"https:\/\/app.vssps.visualstudio.com\/_signout?mkt=en-us&_ga=1.265116815.1812220160.1467138837","profileEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/profile\/profiles\/me","clientId":"d03813425c8362d0","label_profile":"Visual Studio profile","connectionDataEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/connectionData","ga":{"vsid_dimension":"dimension12"}};jQuery(document).on("vscom-slider-js", function() {var opts={auto:{speed:4500,pauseOnHover:true},fullscreen:false,swipe:true};makeBSS(".home-general-slider", opts);var BSSFitImages = function() {if(/MSIE|Trident/.test(navigator.userAgent)){objectFitImages(".vscom-slider-slide img");}}; if(typeof objectFitImages !== "undefined") { BSSFitImages();} else { jQuery(document).on("object-fit-polyfill-js", BSSFitImages);}});jQuery(document).on("vscom-slider-js", function() {var opts={auto:{speed:4500,pauseOnHover:true},fullscreen:false,swipe:true};makeBSS(".devblogs-slider", opts);var BSSFitImages = function() {if(/MSIE|Trident/.test(navigator.userAgent)){objectFitImages(".vscom-slider-slide img");}}; if(typeof objectFitImages !== "undefined") { BSSFitImages();} else { jQuery(document).on("object-fit-polyfill-js", BSSFitImages);}});</script><link rel='stylesheet' id='vscom-slider-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-slider.min.css?ver=1739904767' type='text/css' media='all' /> <script type="text/javascript" id="ajax-filter-js-extra"> /* <![CDATA[ */ var ajaxFilter = {"ajax_url":"https:\/\/visualstudio.microsoft.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/js/ajax-filter.js" id="ajax-filter-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-dom-ready-js/js/vscomDomReady.min.js?ver=1667498194" id="vscom-dom-ready-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/js/common.min.js?1742319959" id="vscom-common-script-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/dropdown-menu.min.js?ver=6.7.2" id="vscom-dropdown-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-extension-cards.min.js?ver=1739469417" id="vscom-extension-cards-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/uploads/fusion-scripts/9e94018e56fd39e99d352fc4dfdd9478.min.js?ver=3.11.14" id="fusion-scripts-js"></script> <script>var sliderBackgrounds = ["https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/02\/VSHubCarouseImage.webp","","","",""];</script><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script><script src="https://www.microsoft.com/onerfstatics/marketingsites-wcus-prod/shell/_scrf/js/themes=default/54-af9f9f/d4-fb1f57/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/e2-608e3c/db-bc0148/dc-7e9864/6d-c07ea1/6f-dafe8c/f6-aa5278/f1-99b817/6d-1e7ed0/b7-cadaa7/c4-898cf2/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/d0-e64f3e/92-10345d/79-499886/7e-cda2d3/58-ab4971/57-c14418/e0-3c9860/de-884374/1f-100dea/33-abe4df/2b-8e0ae6?ver=2.0&_cf=02242021_3231&iife=1"></script><script src="https://mem.gfx.ms/meversion?partner=VisualStudio&market=en-us&uhf=1" defer></script> <!--[if lte IE 8]> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/js/respond.js"></script> <![endif]--> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/VisualStudio/VisualStudioFooterMsft, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What&#39;s new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a> </li> <li> <a aria-label="Surface Laptop What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a> </li> <li> <a aria-label="Surface Laptop Studio 2 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Microsoft Copilot What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="AI in Windows What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>AI in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/copilot/copilot-for-work" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft 365 Copilot</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer &amp; IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer &amp; IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Microsoft Developer Developer &amp; IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftDeveloper_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Microsoft Developer</a> </li> <li> <a aria-label="Microsoft Learn Developer &amp; IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Explore ISV Success Developer &amp; IT" class="c-uhff-link" href="https://www.microsoft.com/isv/isv-success?ocid=cmm3atxvn98" data-m='{"cN":"Footer_DeveloperAndIT_ExploreISVSuccess_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Explore ISV Success</a> </li> <li> <a aria-label="Microsoft Tech Community Developer &amp; IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer &amp; IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer &amp; IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer &amp; IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="#" data-m='{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>English (United States)</a> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <a data-m='{"id":"n10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}' href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer"> <span>Consumer Health Privacy</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c11c1c1m1r1a2","sN":11,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://visualstudio.microsoft.com/support/" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n1c11c1c1m1r1a2","sN":1,"aN":"c11c1c1m1r1a2"}'>Contact us</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n2c11c1c1m1r1a2","sN":2,"aN":"c11c1c1m1r1a2"}'>Privacy &amp; cookies</a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n3c11c1c1m1r1a2","sN":3,"aN":"c11c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://azure.microsoft.com/en-us/support/legal/" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n4c11c1c1m1r1a2","sN":4,"aN":"c11c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://www.microsoft.com/trademarks" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n5c11c1c1m1r1a2","sN":5,"aN":"c11c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com/" data-mscc-ic="false" data-m='{"cN":"Footer_Aboutourads_nav","id":"n6c11c1c1m1r1a2","sN":6,"aN":"c11c1c1m1r1a2"}'>About our ads</a> </li> <li>&#169; Microsoft 2025</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> const globalPrivacyControlEnabled = navigator.globalPrivacyControl; const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); if(window.onGPCLoaded) { window.onGPCLoaded(); } function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut'; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue) ? cookieValue[2] : ''; } </script> </div> </div> </div> <!-- Usabilla feedback button --> <div id="usabilla-button" class="vscom-usabilla-button"> <a tabindex="0" id="usbl-integrated-button" data-bi-id="Usabilla" href="javascript:" class="vscom-usabilla-link" role="button" onclick="custom_vs_usabilla_call()" onkeypress="if(event.keyCode==32||event.keyCode==13){event.preventDefault();var bt = document.getElementById('usbl-integrated-button');bt.click(event);};"> <p class="vscom-usabilla-text"> Feedback <img class="vscom-usabilla-icon" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/edit-outline.svg" alt="" /> </p> </a> </div> <script type="text/javascript"> function custom_vs_usabilla_call() { window.lightningjs||function(n){var e="lightningjs";function t(e,t){var r,i,a,o,d,c;return t&&(t+=(/\?/.test(t)?"&":"?")+"lv=1"),n[e]||(r=window,i=document,a=e,o=i.location.protocol,d="load",c=0,function(){n[a]=function(){var t=arguments,i=this,o=++c,d=i&&i!=r&&i.id||0;function s(){return s.id=o,n[a].apply(s,arguments)}return(e.s=e.s||[]).push([o,d,t]),s.then=function(n,t,r){var i=e.fh[o]=e.fh[o]||[],a=e.eh[o]=e.eh[o]||[],d=e.ph[o]=e.ph[o]||[];return n&&i.push(n),t&&a.push(t),r&&d.push(r),s},s};var e=n[a]._={};function s(){e.P(d),e.w=1,n[a]("_load")}e.fh={},e.eh={},e.ph={},e.l=t?t.replace(/^\/\//,("https:"==o?o:"http:")+"//"):t,e.p={0:+new Date},e.P=function(n){e.p[n]=new Date-e.p[0]},e.w&&s(),r.addEventListener?r.addEventListener(d,s,!1):r.attachEvent("onload",s);var l=function(){function n(){return["<!DOCTYPE ",o,"><",o,"><head></head><",t,"><",r,' src="',e.l,'"></',r,"></",t,"></",o,">"].join("")}var t="body",r="script",o="html",d=i[t];if(!d)return setTimeout(l,100);e.P(1);var c,s=i.createElement("div"),h=s.appendChild(i.createElement("div")),u=i.createElement("iframe");s.style.display="none",d.insertBefore(s,d.firstChild).id="lightningjs-"+a,u.frameBorder="0",u.id="lightningjs-frame-"+a,/MSIE[ ]+6/.test(navigator.userAgent)&&(u.src="javascript:false"),u.allowTransparency="true",h.appendChild(u);try{u.contentWindow.document.open()}catch(n){e.domain=i.domain,c="javascript:var d=document.open();d.domain='"+i.domain+"';",u.src=c+"void(0);"}try{var p=u.contentWindow.document;p.write(n()),p.close()}catch(e){u.src=c+'d.write("'+n().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}e.P(2)};e.l&&l()}()),n[e].lv="1",n[e]}var r=window.lightningjs=t(e);r.require=t,r.modules=n}({});window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/c1a9f67c29cb.js"); window.usabilla_live("hide"); window.usabilla_live("click"); //document.getElementById("usbl-integrated-button").addEventListener("click",function(){ //window.usabilla_live("click"); //}); } </script> <!-- Implementation of the 3PDS (Third-Party Data Sharing) process is followed by embedding the Usabilla Live code --> <script type="text/javascript"> // Check if GPC_DataSharingOptIn is a boolean before setting the property to 1DS if (typeof GPC_DataSharingOptIn === 'boolean') { awa.sku.getPropertyManager().getPropertiesContext().web.gpcDataSharingOptIn = GPC_DataSharingOptIn } </script> <!-- end usabilla live embed code --> <script src="/wp-content/themes/Avada-Child-Theme/assets/js/vscom-usabilla-a11y.js"></script> <script>window.performance && performance.mark && performance.mark("BodyAreaEnd")</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10