CINXE.COM

Visual Studio Hub: Your one-stop destination for latest news, updates, and insights

<!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 Hub: Your one-stop destination for latest news, updates, and insights</title> <meta name="description" content="Stay up-to-date with everything Visual Studio! Get the latest news, features, tips, and resources to elevate your development experience." /> <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"/> <link rel="canonical" href="https://visualstudio.microsoft.com/hub/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Visual Studio Hub: Your one-stop destination for latest news, updates, and insights" /> <meta property="og:description" content="Stay up-to-date with everything Visual Studio! Get the latest news, features, tips, and resources to elevate your development experience." /> <meta property="og:url" content="https://visualstudio.microsoft.com/hub/" /> <meta property="og:site_name" content="Visual Studio" /> <meta property="og:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vs-hub-seo-img.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="Stay up-to-date with everything Visual Studio! Get the latest news, features, tips, and resources to elevate your development experience." /> <meta name="twitter:title" content="Visual Studio Hub: Your one-stop destination for latest news, updates, and insights" /> <meta name="twitter:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vs-hub-seo-img.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/hub/#primaryimage", "url": "https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vs-hub-seo-img.jpg", "width": 1200, "height": 628 }, { "@type": "WebPage", "@id": "https://visualstudio.microsoft.com/hub/#webpage", "url": "https://visualstudio.microsoft.com/hub/", "inLanguage": "en_US", "name": "Visual Studio Hub: Your one-stop destination for latest news, updates, and insights", "isPartOf": { "@id": "http://localhost/#website" }, "primaryImageOfPage": { "@id": "https://visualstudio.microsoft.com/hub/ '#primaryimage" }, "datePublished": "2025-02-21T14:38:04+00:00", "dateModified": "2025-02-27T12:21:18+00:00", "description": "Stay up-to-date with everything Visual Studio! Get the latest news, features, tips, and resources to elevate your development experience." } ] } </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.2' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-reimagine-style-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/reimagine.css?ver=1.0' type='text/css' media='all' /> <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='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' /> <meta name="ms.locale_id" content="219321" /> <meta name="ms.locale_slug" content="hub" /> <script type="text/javascript"> // document.onReady document.addEventListener("DOMContentLoaded", function(event) { var locale_slug = "hub"; var locale_id = "219321"; }); </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/?p=219321' /> <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-219321" /> <meta name="ms.lang" content="en" /> <meta name="ms.loc" content="US" /> <meta name="Ms.Locale" content="en_US" /> <link rel="alternate" hreflang="en" href="https://visualstudio.microsoft.com/hub/" /><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">.bg-dev-hub-social ul.vscom-slider-jump-list { display: none !important; visibility: hidden; } .single-click { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1; } .single-click::before { content: " "; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: block; border-radius: 8px; z-index: -1; pointer-events: none; } .single-click:hover { text-decoration: none; } .z-2 { z-index: 2; }</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\/hub\/","en":"https:\/\/visualstudio.microsoft.com\/hub\/","US":"https:\/\/visualstudio.microsoft.com\/hub\/","zh_CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/hub\/","zh-hans":"https:\/\/visualstudio.microsoft.com\/zh-hans\/hub\/","CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/hub\/","zh_TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/hub\/","zh-hant":"https:\/\/visualstudio.microsoft.com\/zh-hant\/hub\/","TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/hub\/","fr_FR":"https:\/\/visualstudio.microsoft.com\/fr\/hub\/","fr":"https:\/\/visualstudio.microsoft.com\/fr\/hub\/","FR":"https:\/\/visualstudio.microsoft.com\/fr\/hub\/","de_DE":"https:\/\/visualstudio.microsoft.com\/de\/hub\/","de":"https:\/\/visualstudio.microsoft.com\/de\/hub\/","DE":"https:\/\/visualstudio.microsoft.com\/de\/hub\/","it_IT":"https:\/\/visualstudio.microsoft.com\/it\/hub\/","it":"https:\/\/visualstudio.microsoft.com\/it\/hub\/","IT":"https:\/\/visualstudio.microsoft.com\/it\/hub\/","ja_JP":"https:\/\/visualstudio.microsoft.com\/ja\/hub\/","ja":"https:\/\/visualstudio.microsoft.com\/ja\/hub\/","JP":"https:\/\/visualstudio.microsoft.com\/ja\/hub\/","ru_RU":"https:\/\/visualstudio.microsoft.com\/ru\/hub\/","ru":"https:\/\/visualstudio.microsoft.com\/ru\/hub\/","RU":"https:\/\/visualstudio.microsoft.com\/ru\/hub\/","es_ES":"https:\/\/visualstudio.microsoft.com\/es\/hub\/","es":"https:\/\/visualstudio.microsoft.com\/es\/hub\/","ES":"https:\/\/visualstudio.microsoft.com\/es\/hub\/","cs_CZ":"https:\/\/visualstudio.microsoft.com\/cs\/hub\/","cs":"https:\/\/visualstudio.microsoft.com\/cs\/hub\/","CZ":"https:\/\/visualstudio.microsoft.com\/cs\/hub\/","ko_KR":"https:\/\/visualstudio.microsoft.com\/ko\/hub\/","ko":"https:\/\/visualstudio.microsoft.com\/ko\/hub\/","KR":"https:\/\/visualstudio.microsoft.com\/ko\/hub\/","pl_PL":"https:\/\/visualstudio.microsoft.com\/pl\/hub\/","pl":"https:\/\/visualstudio.microsoft.com\/pl\/hub\/","PL":"https:\/\/visualstudio.microsoft.com\/pl\/hub\/","pt_BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/hub\/","pt-br":"https:\/\/visualstudio.microsoft.com\/pt-br\/hub\/","BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/hub\/","tr_TR":"https:\/\/visualstudio.microsoft.com\/tr\/hub\/","tr":"https:\/\/visualstudio.microsoft.com\/tr\/hub\/","TR":"https:\/\/visualstudio.microsoft.com\/tr\/hub\/"},"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="page-template-default page page-id-219321 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 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":"nn8c8c3m1r1a1","sN":8,"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":"n9c8c3m1r1a1","sN":9,"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 class="vscom-modal-window-wrapper vscom-modal-window-wrapper--hidden" id="vscom-mobile-download-dialog"> <style> #vscom-mobile-download-dialog .vscom-modal-window-content { display: none; } #vscom-mobile-download-dialog .vscom-modal-window-content.active { display: block; } </style> <div class="vscom-modal-window vscom-modal-window--mdd"> <button class="vscom-mobile-dialog-close white-focus-outline" aria-label="Close modal"> <i class="vscom-icon vscom-icon--Cancel" id="vscom-mobile-download-dialog-close"></i> </button> <div class="vscom-modal-window-content mobile-download-dialog-form"> <div data-form-block-id="0ddbaebe-5157-ea11-a811-000d3a3b1bf3"></div> <div id="doS-uJoaJ8L9cVnALebcBTdlxs9zZdFZ4Myv2ygU4Sbg"></div> </div> <div class="vscom-modal-window-content mobile-download-dialog-generic"> <div class="vscom-modal-window-content-inner x-hidden-focus"> <h2 class="vscom-mobile-dialog-header"> This device is not currently supported for these products. </h2> <div class="vscom-mobile-dialog-products"> <a class="black-focus-outline" href="/vs/" id="vscom-mobile-dialog-click-vs"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/02/BrandVisualStudioWin2019-2.svg"> Visual Studio IDE <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="/vs/mac" id="vscom-mobile-dialog-click-vs-mac"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/VSforMacIcon2019-2.svg"> Visual Studio for Mac <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" id="vscom-mobile-dialog-click-vscode"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/vs-code-responsive-01-1.png"> Visual Studio Code <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> </div> </div> <div class="vscom-modal-window-footer"> <a class="vscom-mobile-dialog-download" href="#" id="vscom-mobile-dialog-continue-download-click-generic"> <span class="vscom-mobile-dialog-download-text x-hidden-focus"> To continue downloading, click here <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </span> </a> </div> </div> </div> </div> <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%;"><section id="content" style=""> <div id="post-219321" class="post-219321 page type-page status-publish hentry"> <span class="entry-title rich-snippet-hidden">Hub</span><span class="updated rich-snippet-hidden">2025-02-27T12:21:18-08:00</span> <div class="post-content"> <div class="fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none 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-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2025/02/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-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="fusion-text fusion-text-1"><section class="pt-56 pb-56 pt-md-96 pb-md-96"> <h1 class="mb-16 clr-white text-center">Visual Studio Hub</h1> <p class="mb-48 clr-white margin-auto text-center" style="max-width: 450px;">Your one-stop destination for everything Visual Studio</p> <div class="grid gap-16"> <div class="grid grid-lg-col-2 gap-16"> <div class="flex flex-column flex-md-row sh-day-2 sh-drk-28-hover border-r-24 bg-white p-8 h-card zoom-bg" style="background-image: url('https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-whats-new.png'); background-size: cover; background-position: center; background-repeat: no-repeat;"> <p><a data-bi-area="hero" data-bi-id="discover" data-bi-name="Check updates" href="#discover" class="single-click"></a></p> <div class="position-relative flex flex-1 flex-column justify-content-between bg-light-gray border-r-24"> <div class="pl-24 pr-24 pt-24"> <p class="fs-12 mb-8">What&#8217;s new</p> <h3 class="fs-37 fw-400 mb-16">Discover</h3> <p class="mb-32">Whether you&#8217;re using Visual Studio for the first time or you&#8217;ve been using it for years, there&#8217;s a lot to like in our newest version.</p> </div> <div class="position-relative pr-24 pl-24 pb-24"><a data-bi-area="hero" data-bi-id="discover" data-bi-name="Check updates" href="#discover" class="position-relative z-2 btn btn-purple-30 py-8 px-16">Check updates</a></div> </div> <div class="grid flex-1"></div> </div> <div class="flex flex-column flex-md-row gap-16"> <div class="position-relative zoom flex flex-1 flex-column justify-content-between bg-white border-r-24 sh-day-2 sh-drk-28-hover"> <p><a data-bi-area="hero" data-bi-id="copilot" data-bi-name="Discover" href="#copilot" class="single-click"></a></p> <div class="pt-24 pl-24 pr-24"> <p class="fs-12 mb-8">GitHub Copilot</p> <h3 class="fs-37 fw-400 mb-16">Accelerate</h3> <p class="mb-8">Ship great software faster, get contextualized assistance throughout your workflow.</p> <p><a data-bi-area="hero" data-bi-id="copilot" data-bi-name="Discover" href="#copilot" class="position-relative z-2 btn btn-purple-30 py-8 px-16 mb-24">Discover how</a></p> </div> <div> <div class="zoom-img-container mr-8 mb-8 ml-8"><img decoding="async" class="border-r-24 vertical-align-top" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-create.png" alt="Visual Studio" /></div> </div> </div> <div class="position-relative zoom flex-1 bg-plum border-r-24 sh-day-2 sh-drk-28-hover"> <p><a href="#community" data-bi-area="hero" data-bi-id="community" data-bi-name="Get connected" class="single-click"></a></p> <div class="pt-24 pl-24 pr-24"> <p class="fs-12 mb-8 clr-white">Visual Studio Events</p> <h3 class="fs-37 fw-400 clr-white mb-16">Network</h3> <p class="clr-white mb-8">Build valuable connections with fellow developers and industry experts at our upcoming Visual Studio events.</p> <p><a href="#community" data-bi-area="hero" data-bi-id="community" data-bi-name="Get connected" class="position-relative z-2 btn btn-white py-8 px-16 mb-24">Get connected</a></p> </div> <div> <div class="zoom-img-container mr-8 mb-8 ml-8"><img decoding="async" class="border-r-24 vertical-align-top" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-connect.png" alt="Visual Studio" /></div> </div> </div> </div> </div> <div class="grid grid-lg-col-2 gap-16"> <div class="flex flex-column flex-md-row gap-16"> <div class="position-relative zoom flex flex-column justify-content-between flex-1 bg-plum border-r-24 sh-day-2 sh-drk-28-hover"> <p><a href="#resources" data-bi-area="hero" data-bi-id="tips and tricks" data-bi-name="dive in" class="single-click"></a></p> <div class="pt-24 pl-24 pr-24"> <p class="fs-12 mb-8 clr-white">Key resources</p> <h3 class="fs-37 fw-400 clr-white mb-16">Leverage</h3> <p class="clr-white mb-8">Unlock the knowledge and support you need to grow as a developer.</p> <p><a href="#resources" data-bi-area="hero" data-bi-id="tips and tricks" data-bi-name="dive in" class="position-relative z-2 btn btn-white py-8 px-16 mb-24">Dive in</a></p> </div> <div> <div class="zoom-img-container mr-8 mb-8 ml-8"><img decoding="async" class="border-r-24 vertical-align-top" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/DevHub-HeroImage-Leverage-2000px.png" alt="Visual Studio" /></div> </div> </div> <div class="position-relative zoom flex flex-1 flex-column justify-content-between bg-white border-r-24 sh-day-2 sh-drk-28-hover"> <p><a href="#blog-posts" data-bi-area="hero" data-bi-id="blog" data-bi-name="Get highlights" class="single-click"></a></p> <div class="pt-24 pl-24 pr-24"> <p class="fs-12 mb-8 clr-black">Developer Blogs</p> <h3 class="fs-37 fw-400 clr-black mb-16">Explore</h3> <p class="clr-black mb-8">Stay ahead of the curve by keeping up with the latest trends and best practices.</p> <p><a href="#blog-posts" data-bi-area="hero" data-bi-id="blog" data-bi-name="Get highlights" class="position-relative z-2 btn btn-purple-30 py-8 px-16 mb-24">Get highlights</a></p> </div> <div> <div class="zoom-img-container mr-8 mb-8 ml-8"><img decoding="async" class="border-r-24 vertical-align-top" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/DevHub-HeroImage-Insights-2000px.webp" alt="Visual Studio" /></div> </div> </div> </div> <div class="position-relative flex flex-column flex-md-row sh-day-2 sh-drk-28-hover border-r-24 bg-white p-8 h-card zoom-bg" style="background-image: url('https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-social.png'); background-size: cover; background-position: center; background-repeat: no-repeat;"> <p><a href="#social-logo-bar" data-bi-area="hero" data-bi-id="social" data-bi-name="Join conversation" class="single-click"></a></p> <div class="position-relative flex flex-1 flex-column justify-content-between bg-white border-r-24"> <div class="pt-24 pl-24 pr-24"> <div class="flex flex-wrap gap-12 social-list mb-16"><a data-bi-area="hero_social_youtube" href="https://www.youtube.com/@visualstudio" target="_blank" class="position-relative z-2 position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-youtube.png" alt="YouTube" class="border-r-8" /></a> <a href="https://x.com/VisualStudio" data-bi-area="hero_social_x" target="_blank" class="position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-x.png" alt="X" class="border-r-8" /></a> <a data-bi-area="hero_social_linkedin" href="https://www.linkedin.com/showcase/microsoft-visual-studio/posts/?feedView=all" target="_blank" class="position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-linkedin.png" alt="LinkedIn" class="border-r-8" /></a> <a data-bi-area="hero_social_threads" href="https://www.threads.net/@microsoftvisualstudio" target="_blank" class="position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-threads.png" alt="Threads" class="border-r-8" /></a> <a data-bi-area="hero_social_instagram" href="https://www.instagram.com/microsoftvisualstudio/" target="_blank" class="position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-instagram.png" alt="Instagram" class="border-r-8" /></a> <a data-bi-area="hero_social_facebook" href="https://www.facebook.com/visualstudio" target="_blank" class="position-relative z-2 sh-light-02 border-r-8" rel="noopener"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/hero-facebook.png" alt="facebook" class="border-r-8" /></a></div> <p class="fs-12 mb-8 clr-black">Social channels</p> <h3 class="fs-37 mb-16">Follow</h3> <p class="mb-24">Connect with us on social media to stay updated with the latest news, tips, and exclusive content.</p> </div> <div class="position-relative pr-24 pl-24 pb-24"><a href="#social-logo-bar" data-bi-area="hero" data-bi-id="social" data-bi-name="Join conversation" class="position-relative z-2 btn btn-purple-30 py-8 px-16">Join conversation</a></div> </div> <div class="flex-1"></div> </div> </div> </div> </section> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background display-none 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:30px;--awb-padding-bottom:90px;--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" 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 role="region" class="Slideshow-1738003964 bss-slides vscom-slider vscom-slider--modern-mini" aria-label="Slideshow 1738003964"> <div class="vscom-slide-background-accent-wrapper"> </div> <div class="vscom-slider-wrapper"> <div class="vscom-slider-slides-wrapper" aria-live="polite"> <style type="text/css" scoped="scoped"></style> <article data-title="More Context == Better GitHub Copilot Responses in Visual Studio" class="vscom-slide-0 vscom-slider-slide bss-show " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/more-context.jpg" > <a role="button" href="https://www.youtube.com/watch?v=N62d9PgiqoY" target=_self data-bi-compnm="slider" data-bi-id="" data-bi-name="image link- https://visualstudio.microsoft.com/wp-content/uploads/2025/01/more-context.jpg" aria-label=" " tabindex="-1" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/more-context.jpg" alt="" /> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a> </article><style type="text/css" scoped="scoped"></style> <article data-title="Master Copilot Your Way: Unlocking the Power of Copilot Instructions in Visual Studio!" class="vscom-slide-1 vscom-slider-slide " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/master-copilot-your-way.jpg" > <a role="button" href="https://youtu.be/qOjhmz5ag1w?si=XEYRKM8VehiC73WE" target=_blank data-bi-compnm="slider" data-bi-id="" data-bi-name="image link- https://visualstudio.microsoft.com/wp-content/uploads/2025/01/master-copilot-your-way.jpg" aria-label=" " tabindex="-1" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/master-copilot-your-way.jpg" alt="" /> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a> </article><style type="text/css" scoped="scoped"></style> <article data-title="Getting start with GitHub Copilot" class="vscom-slide-2 vscom-slider-slide " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/getting-start-with-github-copilot.jpg" > <a role="button" href="https://youtu.be/uXbLlD4pBO0?si=j7fEzWea6o922EXv" target=_self data-bi-compnm="slider" data-bi-id="" data-bi-name="image link- https://visualstudio.microsoft.com/wp-content/uploads/2025/01/getting-start-with-github-copilot.jpg" aria-label=" " tabindex="-1" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/01/getting-start-with-github-copilot.jpg" alt="" /> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a> </article> </div> <a class="bss-pause" data-bi-compnm="slider" data-bi-id="" 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="3" value="true" aria-posinset="1" class="vscom-slider-jump-item"><a data-slide-position="1" data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 1" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="More Context == Better GitHub Copilot Responses in Visual Studio" href="javascript:void(0)" aria-label="View More Context == Better GitHub Copilot Responses in Visual Studio slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">More Context == Better GitHub Copilot Responses in Visual Studio</span></div></a></li><li aria-setsize="3" value="true" aria-posinset="2" class="vscom-slider-jump-item"><a data-slide-position="2" data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 2" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Master Copilot Your Way: Unlocking the Power of Copilot Instructions in Visual Studio!" href="javascript:void(0)" aria-label="View Master Copilot Your Way: Unlocking the Power of Copilot Instructions in Visual Studio! slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Master Copilot Your Way: Unlocking the Power of Copilot Instructions in Visual Studio!</span></div></a></li><li aria-setsize="3" value="true" aria-posinset="3" class="vscom-slider-jump-item"><a data-slide-position="3" data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 3" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Getting start with GitHub Copilot" href="javascript:void(0)" aria-label="View Getting start with GitHub Copilot slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Getting start with GitHub Copilot</span></div></a></li> </ul> </div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background bg-dev-hub-social 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-flex-wrap:wrap;" id="social" ><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-2 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-2"><section class="pt-56 pb-56 pt-md-96 pb-md-96"> <div id="social-logo-bar"> <h2 class="fs-37 mb-48">Follow Visual Studio on social</h2> <div class="mb-80 logo-bar px-48 py-48 border-r-24"> <div class="flex flex-wrap justify-content-center gap-36 px-32 py-48 bg-white-50-blur-20 border-r-24"><a href="https://www.youtube.com/@visualstudio" data-bi-area="social" data-bi-id="social links" data-bi-name="Youtube link" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-youtube.png" alt="YouTube" /> </a> <a data-bi-area="social" data-bi-id="social links" data-bi-name="X link" href="https://x.com/VisualStudio" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-x.png" alt="X" /> </a> <a data-bi-area="social" data-bi-id="social links" data-bi-name="Linkedin link" href="https://www.linkedin.com/showcase/microsoft-visual-studio/posts/?feedView=all" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-linkedin.png" alt="LinkedIn" /> </a> <a data-bi-area="social" data-bi-id="social links" data-bi-name="facebook link" href="https://www.facebook.com/visualstudio" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-facebook.png" alt="Facebook" /> </a> <a data-bi-area="social" data-bi-id="social links" data-bi-name="Threads link" href="https://www.threads.net/@microsoftvisualstudio" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-threads.png" alt="Threads" /> </a> <a data-bi-area="social" data-bi-id="social links" data-bi-name="Instagram link" href="https://www.instagram.com/microsoftvisualstudio/" class="flex bg-white border-r-8 sh-day-2 sh-light-28-hover"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/social-instagram.png" alt="Instagram" /> </a></div> </div> </div> <div id="tips-and-tricks" class="text-center"> <h2 class="fs-29 mb-24">Trending now on YouTube</h2> <p><a data-bi-area="youtube" data-bi-id="youtube" data-bi-name="Subscribe" href="https://www.youtube.com/@visualstudio" target="_blank" class="btn btn-purple-30 py-12 px-24" rel="noopener">Subscribe now</a></p> </div> <p><div role="region" style="touch-action: pan-y; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);" class="Slideshow-1738003964 vs-yt-slider bss-slides vscom-slider vscom-slider--modern-mini" aria-label="Youtube slideshow" > <div class="vscom-slide-background-accent-wrapper"> </div> <div class="vscom-slider-wrapper"> <div class="vscom-slider-slides-wrapper" aria-live="polite"><article data-title="Edit markdown like a pro with Visual Studio" class="vscom-slide-0 vscom-slider-slide" data-slide-bg="https://i1.ytimg.com/vi/091NLL4M4Gk/maxresdefault.jpg" ><a role="button" href="https://www.youtube.com/watch?v=091NLL4M4Gk" target="_blank" data-bi-area="slider_video" data-bi-compnm="slider" data-bi-name="image link-Edit markdown like a pro with Visual Studio aria-label="Edit markdown like a pro with Visual Studio" > <img decoding="async" class="vscom-slide-image " src="https://i1.ytimg.com/vi/091NLL4M4Gk/maxresdefault.jpg" alt="Edit markdown like a pro with Visual Studio"> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a></article><article data-title="GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio!" class="vscom-slide-1 vscom-slider-slide" data-slide-bg="https://i3.ytimg.com/vi/VVnOU3iCuOU/maxresdefault.jpg" ><a role="button" href="https://www.youtube.com/watch?v=VVnOU3iCuOU" target="_blank" data-bi-area="slider_video" data-bi-compnm="slider" data-bi-name="image link-GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio! aria-label="GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio!" > <img decoding="async" class="vscom-slide-image " src="https://i3.ytimg.com/vi/VVnOU3iCuOU/maxresdefault.jpg" alt="GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio!"> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a></article><article data-title="Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio" class="vscom-slide-2 vscom-slider-slide" data-slide-bg="https://i1.ytimg.com/vi/hALZoDdY8-w/maxresdefault.jpg" ><a role="button" href="https://www.youtube.com/watch?v=hALZoDdY8-w" target="_blank" data-bi-area="slider_video" data-bi-compnm="slider" data-bi-name="image link-Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio aria-label="Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio" > <img decoding="async" class="vscom-slide-image " src="https://i1.ytimg.com/vi/hALZoDdY8-w/maxresdefault.jpg" alt="Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio"> <span class="play-icon vscom-icon vscom-icon--Play"></span> </a></article></div><a class="bss-pause" data-bi-area="slider_video_pause" data-bi-compnm="slider" data-bi-id="" 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="3" value="true" aria-posinset="1" class="vscom-slider-jump-item"><a data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 1" role="button" class="vscom-slider-jump-link" data-link-title="Edit markdown like a pro with Visual Studio" href="javascript:void(0)" aria-label="View Edit markdown like a pro with Visual Studio slide"></a></li> <li aria-setsize="3" value="true" aria-posinset="2" class="vscom-slider-jump-item"><a data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 2" role="button" class="vscom-slider-jump-link" data-link-title="GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio!" href="javascript:void(0)" aria-label="View GitHub Copilot can help with Debugging, Exceptions, Testing, Profiling, & more in Visual Studio! slide"></a></li> <li aria-setsize="3" value="true" aria-posinset="3" class="vscom-slider-jump-item"><a data-bi-compnm="slider" data-bi-id="" data-bi-name="slider jump link 3" role="button" class="vscom-slider-jump-link" data-link-title="Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio" href="javascript:void(0)" aria-label="View Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio slide"></a></li></ul></div></div> </section> </div><div class="fusion-text fusion-text-3"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-4 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-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-3 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-4"><section class="pb-96 mt-36"> <div id="resources"> <h2 class="fs-37 mb-12 fusion-responsive-typography-calculated" data-fontsize="37" data-lineheight="normal" style="--fontsize: 37;">Leverage key resources</h2> <p class="mb-48" style="max-width: 700px;">Empower your development journey with the right knowledge and tools.</p> <div class="grid grid-md-min-360 gap-16" data-bi-area="community"> <div class="flex flex-column justify-content-between border-r-24 sh-day-2 sh-card-box-hover" style="max-width: 520px;"> <div class="mr-8 mt-8 ml-8"><img decoding="async" class="border-r-24" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/Checkout-MicrosoftLearn.png" alt="Visual Studio" /></div> <div class="p-24"> <h3 class="fs-20 fw-400 mb-16 fusion-responsive-typography-calculated" data-fontsize="18.72" data-lineheight="normal" style="--fontsize: 18.72;">Master Visual Studio</h3> <p class="mb-48">Dive into our in-depth documentation to discover best practices, feature tutorials, and more—a destination perfect for beginners and experienced users.</p> <div><a href="https://learn.microsoft.com/visualstudio/windows/" target="_blank" data-bi-name="Master Visual Studio" data-bi-id="Dive into documentation" class="btn btn-purple-30 py-8 px-16" rel="noopener">Dive into documentation</a></div> </div> </div> <div class="flex flex-column justify-content-between border-r-24 sh-day-2 sh-card-box-hover" style="max-width: 520px;"> <div class="mr-8 mt-8 ml-8"><img decoding="async" class="border-r-24" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/Checkout-MicrosoftDeveloper.png" alt="Visual Studio" /></div> <div class="p-24"> <h3 class="fs-20 fw-400 mb-16 fusion-responsive-typography-calculated" data-fontsize="18.72" data-lineheight="normal" style="--fontsize: 18.72;">Connect with fellow developers</h3> <p class="mb-48">Stay ahead in tech and get the job done with Microsoft’s developer tools and services. Grow your skillset and expand your network with local meetups and events.</p> <div><a href="https://developer.microsoft.com/community" target="_blank" data-bi-name="Join Community" data-bi-id="Connect Community" class="btn btn-purple-30 py-8 px-16" rel="noopener">Join the community</a></div> </div> </div> <div class="flex flex-column justify-content-between border-r-24 sh-day-2 sh-card-box-hover" style="max-width: 520px;"> <div class="mr-8 mt-8 ml-8"><img decoding="async" class="border-r-24" style="max-width: 640px;" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-reimagine/images/dev-hub/Checkout-DevCommunnity.png" alt="Visual Studio" /></div> <div class="p-24"> <h3 class="fs-20 fw-400 mb-16 fusion-responsive-typography-calculated" data-fontsize="18.72" data-lineheight="normal" style="--fontsize: 18.72;">Shape the future</h3> <p class="mb-48">Connect with Microsoft engineering teams. Share ideas, request features, and explore community-driven suggestions to help shape the future of Visual Studio.</p> <div><a href="https://developercommunity.visualstudio.com/VisualStudio" target="_blank" data-bi-name="Share your ideas" data-bi-id="Share feedback" class="btn btn-purple-30 py-8 px-16" rel="noopener">Share your ideas</a></div> </div> </div> </div> </div> </section> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-5 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:#f3eff9;--awb-flex-wrap:wrap;" id="discover" ><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-4 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-5"><section class="pt-56 pb-56 pt-md-96 pb-md-96 release-features-section"><div class="flex-lg flex-lg-row justify-content-between align-items-center gap-32 gap-lg-48 mb-48"><div class="mb-24 mb-lg-0"><h2 class="fs-37 lh-normal mb-12 fusion-responsive-typography-calculated" data-fontsize="37" data-lineheight="normal" style="--fontSize: 37;">Discover what's new in Visual Studio 2022</h2><p class="mb-24" style="max-width: 700px;">Check out what's new in the latest release of Visual Studio 17.13.</p><a data-bi-area="whatsnew_release-notes" class="learn-more underline-hover focus-outline" href="https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes" target="_blank">See full release notes <svg width="13" height="11" viewBox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919"/></svg></a></div><div class="w-100" style="max-width: 400px;"><div class="mb-12">Filter by</div><div class="custom-select release-filter bg-white sh-day-2 w-100"><button data-bi-area="whatsnew_areas-filter" aria-haspopup="true" aria-expanded="false" class="dropdown-btn flex align-items-center gap-12"><div class="flex gap-12 align-items-center"> <div class="gradient-border-8"><img decoding="async" <img decoding="async" class="dropdown-btn-icon p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/lib//images/default.svg" alt="Top Highlights"/></div><span class="dropdown-btn-text">Top highlights</span></div><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="dropdown-icon"> <path d="M3.51607 7.05806C3.76014 6.81398 4.15587 6.81398 4.39995 7.05806L9.99967 12.6578L15.5994 7.05806C15.8435 6.81398 16.2392 6.81398 16.4833 7.05806C16.7274 7.30214 16.7274 7.69786 16.4833 7.94194L10.4416 13.9836C10.1975 14.2277 9.80181 14.2277 9.55773 13.9836L3.51607 7.94194C3.27199 7.69786 3.27199 7.30214 3.51607 7.05806Z" fill="#3B2E58"></path></svg></button><ul class="dropdown-menu options-list mt-8" role="menu"><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="top-story" data-img="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/lib//images/default.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/lib//images/default.svg" alt="Top Highlights"/></div> <span class="area-name">Top Highlights</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="cloud" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Cloud.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Cloud.svg" alt="Cloud"/></div> <span class="area-name">Cloud</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="data" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/data.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/data.svg" alt="Data"/></div> <span class="area-name">Data</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="debugging-diagnostics" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Debug.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Debug.svg" alt="Debugging &amp; diagnostics"/></div> <span class="area-name">Debugging &amp; diagnostics</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="desktop" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/desktop.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/desktop.svg" alt="Desktop"/></div> <span class="area-name">Desktop</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="git-tooling" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/git-tooling-v2.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/git-tooling-v2.svg" alt="Git tooling"/></div> <span class="area-name">Git tooling</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="github-copilot" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/GitHubCopilotIcon.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/GitHubCopilotIcon.svg" alt="GitHub Copilot"/></div> <span class="area-name">GitHub Copilot</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="ide" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/IDE.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/IDE.svg" alt="IDE"/></div> <span class="area-name">IDE</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="productivity" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/productivity-v1.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/productivity-v1.svg" alt="Productivity"/></div> <span class="area-name">Productivity</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 align-items-center p-12 fw-600" data-value="web" data-img="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/website-1.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/website-1.svg" alt="Web"/></div> <span class="area-name">Web</span> </li><li tabindex="0" role="menuitem" class="dropdown-item flex gap-12 p-12 align-items-center fw-600" data-value="" data-img="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/lib//images/default.svg"> <div class="gradient-border-8"><img decoding="async" class="p-8" width="auto" height="auto" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/lib//images/all.svg" alt="All Areas"/></div> <span class="area-name">All</span> </li></ul></div></div></div><div id="release-posts-container"><div class="features-posts-list grid grid-lg-min-360 gap-lg-48-96"><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="GitHub Copilot, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/GitHubCopilotIcon.svg" width="24" height="24" alt="GitHub Copilot, Top Highlights"/></div><h3 class="fs-21">Meet GitHub Copilot Free</h3></div><p class="fs-14 lh-20">Copilot Free is now available. You get 2,000 code completions and 50 chat requests per month at no cost, all seamlessly integrated into Visual Studio.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Git tooling, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/git-tooling-v2.svg" width="24" height="24" alt="Git tooling, Top Highlights"/></div><h3 class="fs-21">Catch issues at commit time</h3></div><p class="fs-14 lh-20">Get GitHub Copilot-powered suggestions for your code changes to help you catch potential issues early and improve your code quality.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Debugging &amp; diagnostics, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Debug.svg" width="24" height="24" alt="Debugging &amp; diagnostics, Top Highlights"/></div><h3 class="fs-21">Craft complex LINQ queries</h3></div><p class="fs-14 lh-20">Enhanced editable expression with GitHub Copilot Inline Chat directly in the IEnumerable Visualizer.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Git tooling, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/git-tooling-v2.svg" width="24" height="24" alt="Git tooling, Top Highlights"/></div><h3 class="fs-21">Add comments on pull requests</h3></div><p class="fs-14 lh-20">Review pull requests in Visual Studio by adding new comments to the files on the checked-out branch.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Debugging &amp; diagnostics, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Debug.svg" width="24" height="24" alt="Debugging &amp; diagnostics, Top Highlights"/></div><h3 class="fs-21">Use color-coded swim lanes for CPU profiling</h3></div><p class="fs-14 lh-20">The Visual Studio profiler enables multiprocess CPU analysis with color-coded graphs and filtering.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Productivity, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/productivity-v1.svg" width="24" height="24" alt="Productivity, Top Highlights"/></div><h3 class="fs-21">Customize file encoding</h3></div><p class="fs-14 lh-20">Specify the default encoding for saving files in Visual Studio.</p></div><div class="release-post mb-24 mb-lg-0" data-version="17-13" data-area="Git tooling, Top Highlights"><div class="flex align-items-center gap-24 mb-24"><div class="gradient-border-8"><img decoding="async" class="p-12 box-content" style="width:auto;" src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/git-tooling-v2.svg" width="24" height="24" alt="Git tooling, Top Highlights"/></div><h3 class="fs-21">View and manage Git tags</h3></div><p class="fs-14 lh-20">Navigate and push Git tags seamlessly from Visual Studio.</p></div></div></div></div></section> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-6 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-flex-wrap:wrap;" id="copilot" ><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-5 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-6"><section class="pt-96 pb-96"> <div class="flex flex-column flex-lg-row justify-content-between"> <h2 class="fs-37 fw-600 mb-12 fusion-responsive-typography-calculated" data-fontsize="37" data-lineheight="normal" style="--fontsize: 37;">Accelerate your coding with GitHub Copilot</h2> <div> <div class="flex flex-column flex-md-row flex-wrap align-content-start gap-8 mb-12 mb-lg-0"><a data-bi-area="copilot" data-bi-name="Get Started for free" target="_blank" href="https://github.com/settings/copilot?utm_source=vscom-devhub&amp;utm_medium=web&amp;utm_campaign=2025-VScom-DevHub-GitHubCopilot" class="btn btn-purple-30 px-24 py-12 mb-12 mb-lg-0" rel="noopener">Get started for free</a></div> </div> </div> <p class="mb-24" style="max-width: 664px;">Code faster and with fewer errors. Get real-time code suggestions and auto-completions, and effortlessly learn new coding patterns and best practices.</p> <div class="grid-lg grid-lg-30-70 gap-16 pt-24"> <div class="flex flex-column justify-content-between p-24 mb-16 mb-lg-0 border-r-24 sh-day-2 copilot-featured"> <div style="height: 300px;"></div> <div style="margin-top: auto;"> <h3 class="fs-29 fw-400 clr-white mb-16">GitHub Copilot Free plan</h3> <p class="clr-white">No trial. No credit card required.</p> <p class="clr-white">Just your GitHub account.</p> </div> </div> <div class="grid grid-lg-col-2 gap-16"> <div class="flex flex-column justify-content-between p-24 border-r-24 sh-day-2 sh-card-box-hover"> <div class="mb-24"> <h3 class="fs-21 fw-400 mb-16">Master Code Completions</h3> <p>Get accurate, context-aware code completions and suggestions for single lines or entire code blocks. Reduce repetitive tasks and minimize errors.</p> </div> <div><a data-bi-area="copilot" data-bi-id="copilot blocks" data-bi-name="Master Code Completions" target="_blank" href="https://learn.microsoft.com/visualstudio/ide/visual-studio-github-copilot-extension" class="fw-600 learn-more underline-hover" rel="noopener">Optimize your coding<svg width="13" height="11" viewbox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919"></path></svg></a></div> </div> <div class="flex flex-column justify-content-between p-24 border-r-24 sh-day-2 sh-card-box-hover"> <div class="mb-24"> <h3 class="fs-21 fw-400 mb-16">Chat with an AI buddy</h3> <p>Use Copilot Chat for instant help with code understanding, debugging, and unit test generation. Get answers in natural language or code snippets.</p> </div> <div><a data-bi-area="copilot" data-bi-id="copilot blocks" data-bi-name="Chat with an AI buddy" href="https://learn.microsoft.com/visualstudio/ide/visual-studio-github-copilot-chat" class="fw-600 learn-more underline-hover">Chat with Copilot<svg width="13" height="11" viewbox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919"></path></svg></a></div> </div> <div class="flex flex-column justify-content-between p-24 border-r-24 sh-day-2 sh-card-box-hover"> <div class="mb-24"> <h3 class="fs-21 fw-400 mb-16">Optimize your conversation</h3> <p>Refine your prompts with guided chat. Use custom instructions to automatically add contextual details to your questions.</p> </div> <div><a target="_blank" data-bi-area="copilot" data-bi-id="copilot blocks" data-bi-name="Optimize your conversation" href="https://learn.microsoft.com/visualstudio/ide/copilot-chat-context" class="fw-600 learn-more underline-hover" rel="noopener">Chat prompt tips<svg width="13" height="11" viewbox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919"></path></svg></a></div> </div> <div class="flex flex-column justify-content-between p-24 border-r-24 sh-day-2 sh-card-box-hover"> <div class="mb-24"> <h3 class="fs-21 fw-400 mb-16">Ask Copilot</h3> <p>Ask your debugger-aware AI for help with exceptions, breakpoints, tracepoints, and method call values. Get insights for more efficient, cost-effective code.</p> </div> <div><a target="_blank" data-bi-area="copilot" data-bi-id="copilot blocks" data-bi-name="Ask Copilot" href="https://learn.microsoft.com/visualstudio/debugger/debug-with-copilot" class="fw-600 learn-more underline-hover" rel="noopener">Boost debug efficiency<svg width="13" height="11" viewbox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919"></path></svg></a></div> </div> </div> </div> </section> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background bg-dev-hub-blog 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-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-6 fusion_builder_column_1_1 1_1 fusion-flex-column dev-blog-section" 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-text fusion-text-7"> <!-- Blog Section Start --> <section id="blog-posts" class="bg-white-50-blur-20 border-r-24 px-md-48 py-96"> <div class="flex flex-column flex-lg-row justify-content-between"> <h2 class="fs-37 fw-600 mb-12">Explore developer insights</h2> <div> <div class="flex flex-column flex-md-row flex-wrap align-content-start gap-8 mb-12 mb-lg-0"> <a data-bi-area="blogs_explore-blogs" target="_blank" href="https://devblogs.microsoft.com/visualstudio/" class="btn btn-purple-30 px-24 py-12 mb-12 mb-lg-0">Explore blogs</a> </div> </div> </div> <p class="summary mb-48" style="max-width: 650px;">Lead by staying informed on the latest updates, tips, and inspiration.</p> <div class="blog-section grid grid-lg-col-2 gap-96"> <!-- Left Section - Featured Post --> <div class="featured-post"> <div class="mb-32 bg-white flex align-items-center border-r-8 dev-blog-thumbnail large-thumb"> <a data-bi-area="blogs-left-panel_featured-image-postlink" data-bi-id="featured image" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/catch-issues-before-you-commit-to-git/"> <img decoding="async" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252505-1.png" width="500" alt="Catch issues before you commit to Git" class="vertical-align-top border-r-8"> </a> </div> <p class="fs-12 fw-600 mb-8 dev-blog-author">Jessie Houghton<span class=""> • February 27th, 2025</span></p> <h3 class="fs-24 mb-16"><a data-bi-area="blogs left panel" data-bi-id="title" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/catch-issues-before-you-commit-to-git/">Catch issues before you commit to Git</a> </h3> <p class="summary mb-16">Discovering issues with code changes after committing changes can be frustrating. Fortunately, Visual Studio offers a new featur...</p> <a class="learn-more underline-hover focus-outline w-max" data-bi-area="blogs-left-panel_readmore" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/catch-issues-before-you-commit-to-git/">Read more<svg width="13" height="11" viewBox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919" /> </svg></a> </div> <!-- Right Section - 3 Smaller Posts --> <div class="side-posts flex flex-column gap-16"> <div class="side-post flex-lg flex-lg-row gap-16"> <!-- Left: Featured Image --> <div class="flex-1 flex align-items-center border-r-8 bg-white dev-blog-thumbnail small-thumb"> <a data-bi-area="blogs right panel postlink" data-bi-id="featured image" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/claude-3-7-now-available-in-github-copilot-for-visual-studio/"> <img decoding="async" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/image.jpg" alt="Claude 3.7 Now Available in GitHub Copilot for Visual Studio" class="border-r-8" /> </a> </div> <!-- Right: Author, Date, Title, Read More --> <div class="flex-1 flex flex-column justify-content-between"> <div> <p class="fs-12 fw-600 dev-blog-author">Rhea Patel<span class=""> • February 27th, 2025</span></p> <h3 class="fs-24 fw-600 mt-8 mb-8"><a target="_blank" data-bi-area="blogs" data-bi-id="title" href="https://devblogs.microsoft.com/visualstudio/claude-3-7-now-available-in-github-copilot-for-visual-studio/">Claude 3.7 Now Available in GitHub Copilot for Visual Studio</a> </h3> </div> <a class="learn-more underline-hover focus-outline w-max" target="_blank" data-bi-area="right-panel-blogs-readmore" href="https://devblogs.microsoft.com/visualstudio/claude-3-7-now-available-in-github-copilot-for-visual-studio/" class="custom-underline clr-drk-blue-2 ">Read more<svg width="13" height="11" viewBox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919" /> </svg></a> </div> </div> <div class="side-post flex-lg flex-lg-row gap-16"> <!-- Left: Featured Image --> <div class="flex-1 flex align-items-center border-r-8 bg-white dev-blog-thumbnail small-thumb"> <a data-bi-area="blogs right panel postlink" data-bi-id="featured image" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/attach-images-in-github-copilot-chat/"> <img decoding="async" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/Upload-image-icon.png" alt="Leverage vision in Copilot Chat" class="border-r-8" /> </a> </div> <!-- Right: Author, Date, Title, Read More --> <div class="flex-1 flex flex-column justify-content-between"> <div> <p class="fs-12 fw-600 dev-blog-author">Jessie Houghton<span class=""> • February 27th, 2025</span></p> <h3 class="fs-24 fw-600 mt-8 mb-8"><a target="_blank" data-bi-area="blogs" data-bi-id="title" href="https://devblogs.microsoft.com/visualstudio/attach-images-in-github-copilot-chat/">Leverage vision in Copilot Chat</a> </h3> </div> <a class="learn-more underline-hover focus-outline w-max" target="_blank" data-bi-area="right-panel-blogs-readmore" href="https://devblogs.microsoft.com/visualstudio/attach-images-in-github-copilot-chat/" class="custom-underline clr-drk-blue-2 ">Read more<svg width="13" height="11" viewBox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919" /> </svg></a> </div> </div> <div class="side-post flex-lg flex-lg-row gap-16"> <!-- Left: Featured Image --> <div class="flex-1 flex align-items-center border-r-8 bg-white dev-blog-thumbnail small-thumb"> <a data-bi-area="blogs right panel postlink" data-bi-id="featured image" taget="_blank" href="https://devblogs.microsoft.com/visualstudio/function-calling-is-now-enabled-in-github-copilot/"> <img decoding="async" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/04/Functioncalling.png" alt="Unlocking More Power: Tool Calling in GitHub Copilot for Visual Studio" class="border-r-8" /> </a> </div> <!-- Right: Author, Date, Title, Read More --> <div class="flex-1 flex flex-column justify-content-between"> <div> <p class="fs-12 fw-600 dev-blog-author">Rhea Patel<span class=""> • February 27th, 2025</span></p> <h3 class="fs-24 fw-600 mt-8 mb-8"><a target="_blank" data-bi-area="blogs" data-bi-id="title" href="https://devblogs.microsoft.com/visualstudio/function-calling-is-now-enabled-in-github-copilot/">Unlocking More Power: Tool Calling in GitHub Copilot for Visual S...</a> </h3> </div> <a class="learn-more underline-hover focus-outline w-max" target="_blank" data-bi-area="right-panel-blogs-readmore" href="https://devblogs.microsoft.com/visualstudio/function-calling-is-now-enabled-in-github-copilot/" class="custom-underline clr-drk-blue-2 ">Read more<svg width="13" height="11" viewBox="0 0 13 11" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 5.75001C-1.81059e-08 5.33579 0.335786 5.00001 0.75 5.00001L9.53698 5L6.24991 2.05894C5.94122 1.78274 5.91488 1.3086 6.19107 0.999911C6.46727 0.691222 6.94141 0.664881 7.2501 0.941076L12.0001 5.19107C12.1591 5.33335 12.25 5.53663 12.25 5.75C12.25 5.96338 12.1591 6.16666 12.0001 6.30894L7.2501 10.5589C6.94141 10.8351 6.46727 10.8088 6.19107 10.5001C5.91488 10.1914 5.94122 9.71727 6.24991 9.44108L9.53698 6.5L0.75 6.50001C0.335786 6.50001 1.81059e-08 6.16422 0 5.75001Z" fill="#191919" /> </svg></a> </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 vscom-slider--outer-container events-slider-devhub 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-background-color:rgba(102,102,102,0.12);--awb-flex-wrap:wrap;" id="community" ><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-7 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 class="fusion-text fusion-text-8"><section id="events-section" class="pt-96"> <div class="container"> <h2 style="color: #fff;" class="fs-37 mb-12">Network and connect at developer events</h2> <p class="mb-48" style="color: #fff; max-width: 664px;">Stay ahead in your developer journey with events and opportunities to connect with fellow developers, share insight, and find inspiration.</p> </div> </section> </div><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/Carousel-Background-1.webp);"></div><div class="vscom-slide-accent vscom-slide-background-accent vscom-slide-number-1 " style="background-image: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Carousel-Background-1.webp);"></div><div class="vscom-slide-accent vscom-slide-background-accent vscom-slide-number-2 " style="background-image: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Carousel-Background-1.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/Carousel-Background-1.webp); }</style> <article data-title="Visual Studio Live! - Las Vegas" 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/vslive-lasvegas.webp" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vslive-lasvegas.webp" alt=""/> <div class="vscom-slide-caption" style="background-image: url('');"> <div class="vscom-slide-text"> <h3 class="fs-37">Visual Studio Live! &#8211; Las Vegas</h3> <h4 class="fs-29">March 10-14, 2025</h4> <p style="padding-bottom: 1rem;">Join VSLive! at the Paris Las Vegas Hotel to sharpen your skills in Microsoft Visual Studio, .NET, ASP.NET Core, Blazor, C#, Copilot, .NET MAUI, Azure, and more.</p> </div> <div class="vscom-slide-readmore-wrapper"> <a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/las-vegas-2025/home.aspx" tabindex="0" target="_blank" >Learn more</a> </div> </div> </article><style type="text/css" scoped="scoped">.vscom-slider .vscom-slide-1 { background: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Carousel-Background-1.webp); }</style> <article data-title="Visual Studio Live! @Microsoft HQ" class="vscom-slide-1 vscom-slider-slide vscom-slider-slide--light-text " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vslive-redmond.webp" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vslive-redmond.webp" alt=""/> <div class="vscom-slide-caption" style="background-image: url('');"> <div class="vscom-slide-text"> <h3 class="fs-37">Visual Studio Live! @Microsoft HQ</h3> <h4 class="fs-29">August 4, 2025 &#8211; August 8, 2025</h4> <p style="padding-bottom: 1rem;">VSLive! returns to Microsoft headquarters for five days of in-depth training, networking, and fun! Join us for hands-on and lecture-based workshops, in-depth sessions, keynotes, and more.</p> </div> <div class="vscom-slide-readmore-wrapper"> <a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/microsofthq-2025/home.aspx" tabindex="-1" target="_blank" >Learn more</a> </div> </div> </article><style type="text/css" scoped="scoped">.vscom-slider .vscom-slide-2 { background: url(https://visualstudio.microsoft.com/wp-content/uploads/2025/02/Carousel-Background-1.webp); }</style> <article data-title="Visual Studio Live! San Diego" class="vscom-slide-2 vscom-slider-slide vscom-slider-slide--light-text " data-slide-bg="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vslive-sandiego.webp" > <img decoding="async" class="vscom-slide-image " src="https://visualstudio.microsoft.com/wp-content/uploads/2025/02/vslive-sandiego.webp" alt=""/> <div class="vscom-slide-caption" style="background-image: url('');"> <div class="vscom-slide-text"> <h3 class="fs-37">Visual Studio Live! San Diego</h3> <h4 class="fs-29">September 8, 2025 &#8211; September 12, 2025</h4> <p style="padding-bottom: 1rem;">Join VSLive! in San Diego for five days of sun, fun, and intense developer training. Expect industry experts and Microsoft product team members to share their knowledge.</p> </div> <div class="vscom-slide-readmore-wrapper"> <a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/san-diego-2025/home.aspx" tabindex="-1" target="_blank" >Learn more</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"> <h3 class="fs-37">Visual Studio Live! &#8211; Las Vegas</h3> <h4 class="fs-29">March 10-14, 2025</h4> <p style="padding-bottom: 1rem;">Join VSLive! at the Paris Las Vegas Hotel to sharpen your skills in Microsoft Visual Studio, .NET, ASP.NET Core, Blazor, C#, Copilot, .NET MAUI, Azure, and more.</p> <div class="vscom-slide-readmore-wrapper"><a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/las-vegas-2025/home.aspx" tabindex="0" target="_blank" >Learn more</a></div></div><div class="vscom-slide-accent vscom-slide-text-accent vscom-slide-number-1 "> <h3 class="fs-37">Visual Studio Live! @Microsoft HQ</h3> <h4 class="fs-29">August 4, 2025 &#8211; August 8, 2025</h4> <p style="padding-bottom: 1rem;">VSLive! returns to Microsoft headquarters for five days of in-depth training, networking, and fun! Join us for hands-on and lecture-based workshops, in-depth sessions, keynotes, and more.</p> <div class="vscom-slide-readmore-wrapper"><a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/microsofthq-2025/home.aspx" tabindex="-1" target="_blank" >Learn more</a></div></div><div class="vscom-slide-accent vscom-slide-text-accent vscom-slide-number-2 "> <h3 class="fs-37">Visual Studio Live! San Diego</h3> <h4 class="fs-29">September 8, 2025 &#8211; September 12, 2025</h4> <p style="padding-bottom: 1rem;">Join VSLive! in San Diego for five days of sun, fun, and intense developer training. Expect industry experts and Microsoft product team members to share their knowledge.</p> <div class="vscom-slide-readmore-wrapper"><a os_downloads="no" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-area="slider_announcement" data-bi-ecn="Learn more" data-bi-name="Learn more" class="vscom-slide-readmore vscom-btn-primary fill-violet grow-ellipse fusion-button--light-cta " href="https://vslive.com/events/san-diego-2025/home.aspx" tabindex="-1" target="_blank" >Learn more</a></div></div> </div> <div class="vscom-slider-nav-wrapper"> <ul class="vscom-slider-jump-list"> <li aria-setsize="3" 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 Live! - Las Vegas" href="javascript:void(0)" aria-label="View Visual Studio Live! - Las Vegas slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Visual Studio Live! - Las Vegas</span></div></a></li><li aria-setsize="3" value="true" aria-posinset="2" class="vscom-slider-jump-item"><a data-slide-position="2" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-name="slider jump link 2" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Visual Studio Live! @Microsoft HQ" href="javascript:void(0)" aria-label="View Visual Studio Live! @Microsoft HQ slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Visual Studio Live! @Microsoft HQ</span></div></a></li><li aria-setsize="3" value="true" aria-posinset="3" class="vscom-slider-jump-item"><a data-slide-position="3" data-bi-compnm="slider" data-bi-id="slider announcement" data-bi-name="slider jump link 3" data-bi-bhvr="2" role="button" class="vscom-slider-jump-link" data-link-title="Visual Studio Live! San Diego" href="javascript:void(0)" aria-label="View Visual Studio Live! San Diego slide"><div class="vscom-link-text-wrapper"><span class="vscom-jump-link-text">Visual Studio Live! San Diego</span></div></a></li> </ul> </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 vscom-swimlane 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:96px;--awb-padding-bottom:96px;--awb-flex-wrap:wrap;" id="faq" ><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-8 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-title title fusion-title-1 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;--fontSize:;line-height:;"><h2 class="fs-37">FAQ</h2></h2></div></div></div><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;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><style type="text/css">.fusion-accordian #accordion-219321-1 .panel-title a .vscom-icon{ color: #000000;}.fusion-accordian #accordion-219321-1 .panel-title a .vscom-icon:before{ font-size: 16px; width: 16px;}.fusion-accordian #accordion-219321-1 .panel-title a{font-size:24px;}.fusion-accordian #accordion-219321-1 .panel-title a:hover, #accordion-219321-1 .fusion-toggle-boxed-mode:hover .panel-title a .fusion-toggle-heading{ color: #8661c5;}</style><div class="vscom-toggle accordian fusion-accordian"><div class="panel-group fusion-toggle-icon-unboxed" id="accordion-219321-1" data-allow-toggle><div class="vscom-expand-collapse"><button class="vscom-expand-all">Expand All</button><span class="vscom-expcol-spacer"></span><button class="vscom-collapse-all">Collapse All</button></div><div class="fusion-panel panel-default"><div class="panel-heading"><div class="panel-title toggle"><a class="active" aria-expanded="true" aria-controls="e856f7a85e362a323" role="button" data-toggle="collapse" data-parent="#accordion-219321-1" data-target="#e856f7a85e362a323" href="#e856f7a85e362a323" data-bi-area="visualhub_faqs" data-id-prefix="faq" data-bi-id="faq_item_expand"><span class="fusion-toggle-icon-wrapper" aria-hidden="true"><i class="vscom-icon" aria-hidden="true"></i></span><span class="fusion-toggle-heading">What is the Visual Studio Hub?</span></a></div></div><div id="e856f7a85e362a323" class="panel-collapse collapse in" role="region"><div class="panel-body toggle-content fusion-clearfix"> <p>The Visual Studio Hub is a one-stop destination for all things Visual Studio, including the latest blogs, release notes, YouTube videos, social media updates, and community discussions.</p> </div></div></div><div class="fusion-panel panel-default"><div class="panel-heading"><div class="panel-title toggle"><a class="active" aria-expanded="true" aria-controls="6031df3076eebf025" role="button" data-toggle="collapse" data-parent="#accordion-219321-1" data-target="#6031df3076eebf025" href="#6031df3076eebf025" data-bi-area="visualhub_faqs" data-id-prefix="faq" data-bi-id="faq_item_expand"><span class="fusion-toggle-icon-wrapper" aria-hidden="true"><i class="vscom-icon" aria-hidden="true"></i></span><span class="fusion-toggle-heading">Does Visual Studio have a YouTube channel?</span></a></div></div><div id="6031df3076eebf025" class="panel-collapse collapse in" role="region"><div class="panel-body toggle-content fusion-clearfix"> <p><span data-teams="true">Yes! The <a href="https://www.youtube.com/VisualStudio" target="_blank" rel="noopener">Visual Studio YouTube channel</a> features tutorials, release updates, and developer tips to help you get the most out of Visual Studio.</span></p> </div></div></div><div class="fusion-panel panel-default"><div class="panel-heading"><div class="panel-title toggle"><a class="active" aria-expanded="true" aria-controls="0ee5c2474b6dbaee2" role="button" data-toggle="collapse" data-parent="#accordion-219321-1" data-target="#0ee5c2474b6dbaee2" href="#0ee5c2474b6dbaee2" data-bi-area="visualhub_faqs" data-id-prefix="faq" data-bi-id="faq_item_expand"><span class="fusion-toggle-icon-wrapper" aria-hidden="true"><i class="vscom-icon" aria-hidden="true"></i></span><span class="fusion-toggle-heading">Where can I find the latest Visual Studio release notes?</span></a></div></div><div id="0ee5c2474b6dbaee2" class="panel-collapse collapse in" role="region"><div class="panel-body toggle-content fusion-clearfix"> <p>You can always find the latest updates and bug fixes in the <a href="https://learn.microsoft.com/visualstudio/releases/2022/release-notes" target="_blank" rel="noopener">Visual Studio release notes</a>.</p> </div></div></div><div class="fusion-panel panel-default"><div class="panel-heading"><div class="panel-title toggle"><a class="active" aria-expanded="true" aria-controls="468146f91630f9b5c" role="button" data-toggle="collapse" data-parent="#accordion-219321-1" data-target="#468146f91630f9b5c" href="#468146f91630f9b5c" data-bi-area="visualhub_faqs" data-id-prefix="faq" data-bi-id="faq_item_expand"><span class="fusion-toggle-icon-wrapper" aria-hidden="true"><i class="vscom-icon" aria-hidden="true"></i></span><span class="fusion-toggle-heading">How can I stay updated on Visual Studio news?</span></a></div></div><div id="468146f91630f9b5c" class="panel-collapse collapse in" role="region"><div class="panel-body toggle-content fusion-clearfix"> <p>Stay connected by following us on <a href="https://twitter.com/VisualStudio" target="_blank" rel="noopener">X (Twitter)</a>, <a href="https://www.linkedin.com/company/microsoft-visual-studio" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.facebook.com/VisualStudio" target="_blank" rel="noopener">Facebook</a>, and <a href="https://www.instagram.com/VisualStudio" target="_blank" rel="noopener">Instagram</a>.</p> </div></div></div><div class="fusion-panel panel-default"><div class="panel-heading"><div class="panel-title toggle"><a class="active" aria-expanded="true" aria-controls="c1061577d32f3cfd1" role="button" data-toggle="collapse" data-parent="#accordion-219321-1" data-target="#c1061577d32f3cfd1" href="#c1061577d32f3cfd1" data-bi-area="visualhub_faqs" data-id-prefix="faq" data-bi-id="faq_item_expand"><span class="fusion-toggle-icon-wrapper" aria-hidden="true"><i class="vscom-icon" aria-hidden="true"></i></span><span class="fusion-toggle-heading">Does Visual Studio have a community forum?</span></a></div></div><div id="c1061577d32f3cfd1" class="panel-collapse collapse in" role="region"><div class="panel-body toggle-content fusion-clearfix"> <p>Yes! You can join the conversation, ask questions, and collaborate with other developers in the <a href="https://developercommunity.visualstudio.com/VisualStudio" target="_blank" rel="noopener">Visual Studio Developer Community</a>.</p> </div></div></div></div></div></div></div></div></div> </div> </div> </section> </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> </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":"object-fit-polyfill-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/ofi.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}];</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\/hub\/\" selected=\"selected\">English<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hans\/hub\/\" data-lang-code=\"zh-hans\">\u7b80\u4f53\u4e2d\u6587 (Chinese, Simplified)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hant\/hub\/\" data-lang-code=\"zh-hant\">\u7e41\u9ad4\u4e2d\u6587 (Chinese, Traditional)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/fr\/hub\/\" data-lang-code=\"fr\">Fran\u00e7ais<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/de\/hub\/\" data-lang-code=\"de\">Deutsch<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/it\/hub\/\" data-lang-code=\"it\">Italiano<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ja\/hub\/\" data-lang-code=\"ja\">\u65e5\u672c\u8a9e (Japanese)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ru\/hub\/\" data-lang-code=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/es\/hub\/\" data-lang-code=\"es\">Espa\u00f1ol<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/cs\/hub\/\" data-lang-code=\"cs\">\u010ce\u0161tina<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ko\/hub\/\" data-lang-code=\"ko\">\ud55c\uad6d\uc5b4 (Korean)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pl\/hub\/\" data-lang-code=\"pl\">polski<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pt-br\/hub\/\" data-lang-code=\"pt-br\">Portugu\u00eas (Brasil)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/tr\/hub\/\" 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:2500,pauseOnHover:true},fullscreen:false,swipe:true};makeBSS(".Slideshow-1738003964", 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(".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);}});</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?1690822824" id="vscom-common-script-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-toggle.min.js?ver=1740684648" id="vscom-toggle-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/uploads/fusion-scripts/d6f73232bd170a5a6c5165abad5bf724.min.js?ver=3.11.11" id="fusion-scripts-js"></script> <script>var sliderBackgrounds = ["https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/01\/more-context.jpg","https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/01\/master-copilot-your-way.jpg","https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/01\/getting-start-with-github-copilot.jpg","https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/02\/vslive-lasvegas.webp","https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/02\/vslive-redmond.webp","https:\/\/visualstudio.microsoft.com\/wp-content\/uploads\/2025\/02\/vslive-sandiego.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="Documentation Developer &amp; IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</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":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</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> <!--Below DIV tag is for Usabilla 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> <!-- 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 } 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> <!-- 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