software architecture

48 Topics
"}},"componentScriptGroups({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/OverflowNav\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Pager/PagerLoadMore\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageUnreadCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageViewCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/kudos/KudosCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/kudos/KudosCount-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRepliesCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745505309992"}],"cachedText({\"lastModified\":\"1745505309992\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505309992"}]},"CachedAsset:pages-1745160780925":{"__typename":"CachedAsset","id":"pages-1745160780925","value":[{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllEvents","type":"CUSTOM","urlPath":"/Events","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"CommunityHub.Page","type":"CUSTOM","urlPath":"/Directory","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllBlogs.Page","type":"CUSTOM","urlPath":"/blogs","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745160780925,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Deleted","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MMM dd yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"CachedAsset:theme:customTheme1-1745160780424":{"__typename":"CachedAsset","id":"theme:customTheme1-1745160780424","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["default"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"favicon-1730836283320.png","imageLastModified":"1730836286415","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"favicon-1730836271365.png","imageLastModified":"1730836274203","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1300px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"3px","borderRadius":"3px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"700","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-200)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"LIGHT","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","forumColor":"#4099E2","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#148563","blogColor":"#1CBAA0","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#4C6B90","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#FF8000","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#333333","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#717171","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0069D4","secondary":"#333333","bodyText":"#1E1E1E","bodyBg":"#FFFFFF","info":"#409AE2","success":"#41C5AE","warning":"#FCC844","danger":"#BC341B","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#D3F5A4","#243A5E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Segoe UI","fontStyle":"NORMAL","fontWeight":"400","h1FontSize":"34px","h2FontSize":"32px","h3FontSize":"28px","h4FontSize":"24px","h5FontSize":"20px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":"","imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Segoe UI","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Segoe UI","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"300","__typename":"FontStyleData"},{"style":"NORMAL","weight":"600","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"}],"assetNames":["SegoeUI-normal-400.woff2","SegoeUI-normal-300.woff2","SegoeUI-normal-600.woff2","SegoeUI-normal-700.woff2","SegoeUI-italic-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"MWF Fluent Icons","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["MWFFluentIcons-normal-400.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745505309992","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745505309992","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-pages/tags/TagPage-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-pages/tags/TagPage-1745505309992","value":{"tagPageTitle":"Tag:\"{tagName}\" | {communityTitle}","tagPageForNodeTitle":"Tag:\"{tagName}\" in \"{title}\" | {communityTitle}","name":"Tags Page","tag":"Tag: {tagName}"},"localOverride":false},"CachedAsset:quilt:o365.prod:pages/tags/TagPage:community:gxcuf89792-1745502712767":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/tags/TagPage:community:gxcuf89792-1745502712767","value":{"id":"TagPage","container":{"id":"Common","headerProps":{"removeComponents":["community.widget.bannerWidget"],"__typename":"QuiltContainerSectionProps"},"items":[{"id":"tag-header-widget","layout":"ONE_COLUMN","bgColor":"var(--lia-bs-white)","showBorder":"BOTTOM","sectionEditLevel":"LOCKED","columnMap":{"main":[{"id":"tags.widget.TagsHeaderWidget","__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"},{"id":"messages-list-for-tag-widget","layout":"ONE_COLUMN","columnMap":{"main":[{"id":"messages.widget.messageListForNodeByRecentActivityWidget","props":{"viewVariant":{"type":"inline","props":{"useUnreadCount":true,"useViewCount":true,"useAuthorLogin":true,"clampBodyLines":3,"useAvatar":true,"useBoardIcon":false,"useKudosCount":true,"usePreviewMedia":true,"useTags":false,"useNode":true,"useNodeLink":true,"useTextBody":true,"truncateBodyLength":-1,"useBody":true,"useRepliesCount":true,"useSolvedBadge":true,"timeStampType":"conversation.lastPostingActivityTime","useMessageTimeLink":true,"clampSubjectLines":2}},"panelType":"divider","useTitle":false,"hideIfEmpty":false,"pagerVariant":{"type":"loadMore"},"style":"list","showTabs":true,"tabItemMap":{"default":{"mostRecent":true,"mostRecentUserContent":false,"newest":false},"additional":{"mostKudoed":true,"mostViewed":true,"mostReplies":false,"noReplies":false,"noSolutions":false,"solutions":false}}},"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"}],"__typename":"QuiltContainer"},"__typename":"Quilt"},"localOverride":false},"CachedAsset:quiltWrapper:o365.prod:Common:1745505311086":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1745505311086","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":true,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"className":"QuiltComponent_lia-component-edit-mode__0nCcm","links":{"sideLinks":[],"mainLinks":[{"children":[],"linkType":"INTERNAL","id":"gxcuf89792","params":{},"routeName":"CommunityPage"},{"children":[],"linkType":"EXTERNAL","id":"external-link","url":"/Directory","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft365","params":{"categoryId":"microsoft365"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows","params":{"categoryId":"Windows"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-microsoft365-copilot-link","params":{"categoryId":"Microsoft365Copilot"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-teams","params":{"categoryId":"MicrosoftTeams"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-securityand-compliance","params":{"categoryId":"microsoft-security"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"azure","params":{"categoryId":"Azure"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-content_management-link","params":{"categoryId":"Content_Management"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"exchange","params":{"categoryId":"Exchange"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows-server","params":{"categoryId":"Windows-Server"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"outlook","params":{"categoryId":"Outlook"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-endpoint-manager","params":{"categoryId":"microsoftintune"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-2","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities","url":"/","target":"BLANK"},{"children":[{"linkType":"INTERNAL","id":"a-i","params":{"categoryId":"AI"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"education-sector","params":{"categoryId":"EducationSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"partner-community","params":{"categoryId":"PartnerCommunity"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"i-t-ops-talk","params":{"categoryId":"ITOpsTalk"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"healthcare-and-life-sciences","params":{"categoryId":"HealthcareAndLifeSciences"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-mechanics","params":{"categoryId":"MicrosoftMechanics"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"public-sector","params":{"categoryId":"PublicSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-m-b","params":{"categoryId":"MicrosoftforNonprofits"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"io-t","params":{"categoryId":"IoT"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"startupsat-microsoft","params":{"categoryId":"StartupsatMicrosoft"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"driving-adoption","params":{"categoryId":"DrivingAdoption"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-1","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities-1","url":"/","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"/Blogs","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external-1","url":"/Events","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft-learn-1","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-learn-blog","params":{"boardId":"MicrosoftLearnBlog","categoryId":"MicrosoftLearn"},"routeName":"BlogBoardPage"},{"linkType":"EXTERNAL","id":"external-10","url":"https://learningroomdirectory.microsoft.com/","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-3","url":"https://docs.microsoft.com/learn/dynamics365/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-4","url":"https://docs.microsoft.com/learn/m365/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-5","url":"https://docs.microsoft.com/learn/topics/sci/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-6","url":"https://docs.microsoft.com/learn/powerplatform/?wt.mc_id=techcom_header-webpage-powerplatform","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-7","url":"https://docs.microsoft.com/learn/github/?wt.mc_id=techcom_header-webpage-github","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-8","url":"https://docs.microsoft.com/learn/teams/?wt.mc_id=techcom_header-webpage-teams","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-9","url":"https://docs.microsoft.com/learn/dotnet/?wt.mc_id=techcom_header-webpage-dotnet","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-2","url":"https://docs.microsoft.com/learn/azure/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"}],"linkType":"INTERNAL","id":"microsoft-learn","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"community-info-center","params":{"categoryId":"Community-Info-Center"},"routeName":"CategoryPage"}]},"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","controllerHighlightColor":"hsla(30, 100%, 50%)","linkFontWeight":"400","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkBoxShadowHover":"none","linkFontSize":"14px","backgroundOpacity":0.8,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","hamburgerColor":"var(--lia-nav-controller-icon-color)","linkTextBorderBottom":"none","brandLogoHeight":"30px","linkBgHoverColor":"transparent","linkLetterSpacing":"normal","collapseMenuDividerOpacity":0.16,"dropdownPaddingBottom":"15px","paddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","collapseMenuDividerBg":"var(--lia-nav-link-color)","linkColor":"var(--lia-bs-body-color)","linkJustifyContent":"flex-start","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-body-color)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-body-color)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","linkPaddingX":"10px","linkPaddingY":"5px","paddingTop":"15px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkBgColor":"transparent","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"transparent","linkHighlightColor":"var(--lia-bs-primary)","visualEffects":{"showBottomBorder":true},"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.community_banner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"usePageWidth":false,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.HeroBanner","props":{"widgetVisibility":"signedInOrAnonymous","usePageWidth":false,"useTitle":true,"cMax_items":3,"useBackground":false,"title":"","lazyLoad":false,"widgetChooser":"custom.widget.HeroBanner"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.MicrosoftFooter","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745505309992","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:component:custom.widget.community_banner-en-1745160816752":{"__typename":"CachedAsset","id":"component:custom.widget.community_banner-en-1745160816752","value":{"component":{"id":"custom.widget.community_banner","template":{"id":"community_banner","markupLanguage":"HANDLEBARS","style":".community-banner {\n a.top-bar.btn {\n top: 0px;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0px;\n background: #0068b8;\n color: white;\n padding: 10px 0px;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0px !important;\n font-size: 14px;\n }\n}\n","texts":null,"defaults":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.community_banner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_community_banner_community-banner_1x9u2_1 {\n a.custom_widget_community_banner_top-bar_1x9u2_2.custom_widget_community_banner_btn_1x9u2_2 {\n top: 0;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0;\n background: #0068b8;\n color: white;\n padding: 0.625rem 0;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0 !important;\n font-size: 0.875rem;\n }\n}\n","tokens":{"community-banner":"custom_widget_community_banner_community-banner_1x9u2_1","top-bar":"custom_widget_community_banner_top-bar_1x9u2_2","btn":"custom_widget_community_banner_btn_1x9u2_2"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-1745160816752":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-1745160816752","value":{"component":{"id":"custom.widget.HeroBanner","template":{"id":"HeroBanner","markupLanguage":"REACT","style":null,"texts":{"searchPlaceholderText":"Search this community","followActionText":"Follow","unfollowActionText":"Following","searchOnHoverText":"Please enter your search term(s) and then press return key to complete a search.","blogs.sidebar.pagetitle":"Latest Blogs | Microsoft Tech Community","followThisNode":"Follow this node","unfollowThisNode":"Unfollow this node"},"defaults":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.HeroBanner","form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"__typename":"Component","localOverride":false},"globalCss":null,"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"}},"localOverride":false},"CachedAsset:component:custom.widget.MicrosoftFooter-en-1745160816752":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-1745160816752","value":{"component":{"id":"custom.widget.MicrosoftFooter","template":{"id":"MicrosoftFooter","markupLanguage":"HANDLEBARS","style":".context-uhf {\n min-width: 280px;\n font-size: 15px;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.c-uhff-link {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.c-uhff {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.c-uhff-nav {\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n .c-heading-4 {\n color: #616161;\n word-break: break-word;\n font-size: 15px;\n line-height: 20px;\n padding: 36px 0 4px;\n font-weight: 600;\n }\n .c-uhff-nav-row {\n .c-uhff-nav-group {\n display: block;\n float: left;\n min-height: 1px;\n vertical-align: text-top;\n padding: 0 12px;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.c-list.f-bare {\n font-size: 11px;\n line-height: 16px;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 8px 0;\n margin: 0;\n }\n }\n }\n }\n}\n.c-uhff-base {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 30px 5% 16px;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.c-uhff-ccpa {\n font-size: 11px;\n line-height: 16px;\n float: left;\n margin: 3px 0;\n }\n a.c-uhff-ccpa:hover {\n text-decoration: underline;\n }\n ul.c-list {\n font-size: 11px;\n line-height: 16px;\n float: right;\n margin: 3px 0;\n color: #616161;\n li {\n padding: 0 24px 4px 0;\n display: inline-block;\n }\n }\n .c-list.f-bare {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 30px 24px 16px;\n }\n}\n\n.social-share {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n\n.sharing-options {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 43px;\n border-radius: 0px 7px 7px 0px;\n}\n.linkedin-icon {\n border-top-right-radius: 7px;\n}\n.linkedin-icon:hover {\n border-radius: 0;\n}\n.social-share-rss-image {\n border-bottom-right-radius: 7px;\n}\n.social-share-rss-image:hover {\n border-radius: 0;\n}\n\n.social-link-footer {\n position: relative;\n display: block;\n margin: -2px 0;\n transition: all 0.2s ease;\n}\n.social-link-footer:hover .linkedin-icon {\n border-radius: 0;\n}\n.social-link-footer:hover .social-share-rss-image {\n border-radius: 0;\n}\n\n.social-link-footer img {\n width: 40px;\n height: auto;\n transition: filter 0.3s ease;\n}\n\n.social-share-list {\n width: 40px;\n}\n.social-share-rss-image {\n width: 40px;\n}\n\n.share-icon {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n\n.share-icon:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n\n.share-icon:hover .label {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n\n.label {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 10px;\n top: 50%;\n transform: translateY(-50%);\n height: 40px;\n border-radius: 0 6px 6px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 5px 20px 8px;\n margin-left: -1px;\n}\n.linkedin {\n background-color: #0474b4;\n}\n.facebook {\n background-color: #3c5c9c;\n}\n.twitter {\n background-color: white;\n color: black;\n}\n.reddit {\n background-color: #fc4404;\n}\n.mail {\n background-color: #848484;\n}\n.bluesky {\n background-color: white;\n color: black;\n}\n.rss {\n background-color: #ec7b1c;\n}\n#RSS {\n width: 40px;\n height: 40px;\n}\n\n@media (max-width: 991px) {\n .social-share {\n display: none;\n }\n}\n","texts":{"New tab":"What's New","New 1":"Surface Laptop Studio 2","New 2":"Surface Laptop Go 3","New 3":"Surface Pro 9","New 4":"Surface Laptop 5","New 5":"Surface Studio 2+","New 6":"Copilot in Windows","New 7":"Microsoft 365","New 8":"Windows 11 apps","Store tab":"Microsoft Store","Store 1":"Account Profile","Store 2":"Download Center","Store 3":"Microsoft Store Support","Store 4":"Returns","Store 5":"Order tracking","Store 6":"Certified Refurbished","Store 7":"Microsoft Store Promise","Store 8":"Flexible Payments","Education tab":"Education","Edu 1":"Microsoft in education","Edu 2":"Devices for education","Edu 3":"Microsoft Teams for Education","Edu 4":"Microsoft 365 Education","Edu 5":"How to buy for your school","Edu 6":"Educator Training and development","Edu 7":"Deals for students and parents","Edu 8":"Azure for students","Business tab":"Business","Bus 1":"Microsoft Cloud","Bus 2":"Microsoft Security","Bus 3":"Dynamics 365","Bus 4":"Microsoft 365","Bus 5":"Microsoft Power Platform","Bus 6":"Microsoft Teams","Bus 7":"Microsoft Industry","Bus 8":"Small Business","Developer tab":"Developer & IT","Dev 1":"Azure","Dev 2":"Developer Center","Dev 3":"Documentation","Dev 4":"Microsoft Learn","Dev 5":"Microsoft Tech Community","Dev 6":"Azure Marketplace","Dev 7":"AppSource","Dev 8":"Visual Studio","Company tab":"Company","Com 1":"Careers","Com 2":"About Microsoft","Com 3":"Company News","Com 4":"Privacy at Microsoft","Com 5":"Investors","Com 6":"Diversity and inclusion","Com 7":"Accessiblity","Com 8":"Sustainibility"},"defaults":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.MicrosoftFooter","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_MicrosoftFooter_context-uhf_105bp_1 {\n min-width: 17.5rem;\n font-size: 0.9375rem;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-link_105bp_12 {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff_105bp_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35 {\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n .custom_widget_MicrosoftFooter_c-heading-4_105bp_49 {\n color: #616161;\n word-break: break-word;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n padding: 2.25rem 0 0.25rem;\n font-weight: 600;\n }\n .custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58 {\n display: block;\n float: left;\n min-height: 0.0625rem;\n vertical-align: text-top;\n padding: 0 0.75rem;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 0.5rem 0;\n margin: 0;\n }\n }\n }\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff-base_105bp_94 {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 1.875rem 5% 1rem;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: left;\n margin: 0.1875rem 0;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: right;\n margin: 0.1875rem 0;\n color: #616161;\n li {\n padding: 0 1.5rem 0.25rem 0;\n display: inline-block;\n }\n }\n .custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 1.875rem 1.5rem 1rem;\n }\n}\n.custom_widget_MicrosoftFooter_social-share_105bp_138 {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n.custom_widget_MicrosoftFooter_sharing-options_105bp_146 {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 2.6875rem;\n border-radius: 0 0.4375rem 0.4375rem 0;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-top-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-bottom-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 {\n position: relative;\n display: block;\n margin: -0.125rem 0;\n transition: all 0.2s ease;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 img {\n width: 2.5rem;\n height: auto;\n transition: filter 0.3s ease;\n}\n.custom_widget_MicrosoftFooter_social-share-list_105bp_188 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195 {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover .custom_widget_MicrosoftFooter_label_105bp_207 {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n.custom_widget_MicrosoftFooter_label_105bp_207 {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 0.625rem;\n top: 50%;\n transform: translateY(-50%);\n height: 2.5rem;\n border-radius: 0 0.375rem 0.375rem 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.25rem 0.3125rem 1.25rem 0.5rem;\n margin-left: -0.0625rem;\n}\n.custom_widget_MicrosoftFooter_linkedin_105bp_156 {\n background-color: #0474b4;\n}\n.custom_widget_MicrosoftFooter_facebook_105bp_237 {\n background-color: #3c5c9c;\n}\n.custom_widget_MicrosoftFooter_twitter_105bp_240 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_reddit_105bp_244 {\n background-color: #fc4404;\n}\n.custom_widget_MicrosoftFooter_mail_105bp_247 {\n background-color: #848484;\n}\n.custom_widget_MicrosoftFooter_bluesky_105bp_250 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_rss_105bp_254 {\n background-color: #ec7b1c;\n}\n#custom_widget_MicrosoftFooter_RSS_105bp_1 {\n width: 2.5rem;\n height: 2.5rem;\n}\n@media (max-width: 991px) {\n .custom_widget_MicrosoftFooter_social-share_105bp_138 {\n display: none;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_105bp_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_105bp_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_105bp_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_105bp_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58","c-list":"custom_widget_MicrosoftFooter_c-list_105bp_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_105bp_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_105bp_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107","social-share":"custom_widget_MicrosoftFooter_social-share_105bp_138","sharing-options":"custom_widget_MicrosoftFooter_sharing-options_105bp_146","linkedin-icon":"custom_widget_MicrosoftFooter_linkedin-icon_105bp_156","social-share-rss-image":"custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162","social-link-footer":"custom_widget_MicrosoftFooter_social-link-footer_105bp_169","social-share-list":"custom_widget_MicrosoftFooter_social-share-list_105bp_188","share-icon":"custom_widget_MicrosoftFooter_share-icon_105bp_195","label":"custom_widget_MicrosoftFooter_label_105bp_207","linkedin":"custom_widget_MicrosoftFooter_linkedin_105bp_156","facebook":"custom_widget_MicrosoftFooter_facebook_105bp_237","twitter":"custom_widget_MicrosoftFooter_twitter_105bp_240","reddit":"custom_widget_MicrosoftFooter_reddit_105bp_244","mail":"custom_widget_MicrosoftFooter_mail_105bp_247","bluesky":"custom_widget_MicrosoftFooter_bluesky_105bp_250","rss":"custom_widget_MicrosoftFooter_rss_105bp_254","RSS":"custom_widget_MicrosoftFooter_RSS_105bp_1"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745505309992","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagsHeaderWidget-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagsHeaderWidget-1745505309992","value":{"tag":"{tagName}","topicsCount":"{count} {count, plural, one {Topic} other {Topics}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505309992","value":{"title@userScope:other":"Recent Content","title@userScope:self":"Contributions","title@board:FORUM@userScope:other":"Recent Discussions","title@board:BLOG@userScope:other":"Recent Blogs","emptyDescription":"No content to show","MessageListForNodeByRecentActivityWidgetEditor.nodeScope.label":"Scope","title@instance:1722894000155":"Recent Discussions","title@instance:1727367112619":"Recent Blog Articles","title@instance:1727367069748":"Recent Discussions","title@instance:1727366213114":"Latest Discussions","title@instance:1727899609720":"","title@instance:1727363308925":"Latest Discussions","title@instance:1737115580352":"Latest Articles","title@instance:1720453418992":"Recent Discssions","title@instance:1727365950181":"Latest Blog Articles","title@instance:bmDPnI":"Latest Blog Articles","title@instance:IiDDJZ":"Latest Blog Articles","title@instance:1721244347979":"Latest blog posts","title@instance:1728383752171":"Related Content","title@instance:1722893956545":"Latest Skilling Resources","title@instance:dhcgCU":"Latest Discussions"},"localOverride":false},"Category:category:Exchange":{"__typename":"Category","id":"category:Exchange","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Outlook":{"__typename":"Category","id":"category:Outlook","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Community-Info-Center":{"__typename":"Category","id":"category:Community-Info-Center","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:EducationSector":{"__typename":"Category","id":"category:EducationSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:DrivingAdoption":{"__typename":"Category","id":"category:DrivingAdoption","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"displayId":"Azure"},"Category:category:Windows-Server":{"__typename":"Category","id":"category:Windows-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftTeams":{"__typename":"Category","id":"category:MicrosoftTeams","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PublicSector":{"__typename":"Category","id":"category:PublicSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft365":{"__typename":"Category","id":"category:microsoft365","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:IoT":{"__typename":"Category","id":"category:IoT","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:HealthcareAndLifeSciences":{"__typename":"Category","id":"category:HealthcareAndLifeSciences","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:ITOpsTalk":{"__typename":"Category","id":"category:ITOpsTalk","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftLearn":{"__typename":"Category","id":"category:MicrosoftLearn","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Blog:board:MicrosoftLearnBlog":{"__typename":"Blog","id":"board:MicrosoftLearnBlog","blogPolicies":{"__typename":"BlogPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:AI":{"__typename":"Category","id":"category:AI","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftMechanics":{"__typename":"Category","id":"category:MicrosoftMechanics","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftforNonprofits":{"__typename":"Category","id":"category:MicrosoftforNonprofits","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:StartupsatMicrosoft":{"__typename":"Category","id":"category:StartupsatMicrosoft","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PartnerCommunity":{"__typename":"Category","id":"category:PartnerCommunity","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Microsoft365Copilot":{"__typename":"Category","id":"category:Microsoft365Copilot","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows":{"__typename":"Category","id":"category:Windows","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Content_Management":{"__typename":"Category","id":"category:Content_Management","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-security":{"__typename":"Category","id":"category:microsoft-security","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoftintune":{"__typename":"Category","id":"category:microsoftintune","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Conversation:conversation:4407959":{"__typename":"Conversation","id":"conversation:4407959","topic":{"__typename":"BlogTopicMessage","uid":4407959},"lastPostingActivityTime":"2025-04-29T07:30:35.015-07:00","solved":false},"Blog:board:AzureDevCommunityBlog":{"__typename":"Blog","id":"board:AzureDevCommunityBlog","displayId":"AzureDevCommunityBlog","nodeType":"board","conversationStyle":"BLOG","title":"Microsoft Developer Community Blog","shortTitle":"Microsoft Developer Community Blog","parent":{"__ref":"Category:category:Azure"}},"User:user:814565":{"__typename":"User","uid":814565,"login":"junjieli","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS04MTQ1NjUtMzc4OTgyaTIxOTg4RTVERDVDQzM5MTM"},"id":"user:814565"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWlseEpaTg?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWlseEpaTg?revision=6","title":"Banner 1300_500_Message.png","associationType":"COVER","width":1300,"height":500,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LURESkN5WQ?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LURESkN5WQ?revision=6","title":"clipboard_image-1-1745575080010.png","associationType":"BODY","width":1248,"height":1436,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXhCbnRSZg?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXhCbnRSZg?revision=6","title":"clipboard_image-2-1745575080007.png","associationType":"BODY","width":1,"height":1,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXBhSnZhbQ?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXBhSnZhbQ?revision=6","title":"clipboard_image-3-1745575080009.png","associationType":"BODY","width":1248,"height":812,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LTdkTEh2Tw?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LTdkTEh2Tw?revision=6","title":"clipboard_image-4-1745575080010.png","associationType":"BODY","width":1248,"height":816,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWFzNk51Tw?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWFzNk51Tw?revision=6","title":"clipboard_image-5-1745575080010.png","associationType":"BODY","width":1248,"height":796,"altText":""},"BlogTopicMessage:message:4407959":{"__typename":"BlogTopicMessage","subject":"Build AI Agents with MCP Tool Use in Minutes with AI Toolkit for VSCode","conversation":{"__ref":"Conversation:conversation:4407959"},"id":"message:4407959","revisionNum":6,"uid":4407959,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:814565"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Introducing Agent Builder in AI Toolkit","metrics":{"__typename":"MessageMetrics","views":1413},"postTime":"2025-04-29T00:00:00.035-07:00","lastPublishTime":"2025-04-29T07:30:35.015-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" We’re excited to announce Agent Builder, the newest evolution of what was formerly known as Prompt Builder, now reimagined and supercharged for intelligent app development. This powerful tool in AI Toolkit enables you to create, iterate, and optimize agents—from prompt engineering to tool integration—all in one seamless workflow.  \n   \n   \n Whether you're designing simple chat interactions or complex task-performing agents with tool access, Agent Builder simplifies the journey from idea to integration.  \n   \n \n Why Agent Builder?  \n Agent Builder is designed to empower developers and prompt engineers to:  \n \n 🚀 Generate starter prompts with natural language  \n 🔁 Iterate and refine prompts based on model responses  \n 🧩 Break down tasks with prompt chaining and structured outputs  \n 🧪 Test integrations with real-time runs and tool use such as MCP servers  \n 💻 Generate production-ready code for rapid app development  \n \n And a lot of features are coming soon, stay tuned for:  \n \n 📝 Use variables in prompts  \n �� Run agent with test cases to test your agent easily  \n 📊 Evaluate the accuracy and performance of your agent with built-in or your custom metrics  \n ☁️ Deploy your agent to cloud  \n \n Build Smart Agents with Tool Use (MCP Servers)  \n Agents can now connect to external tools through MCP (Model Control Protocol) servers, enabling them to perform real-world actions like querying a database, accessing APIs, or executing custom logic.  \n Connect to an Existing MCP Server  \n \n To use an existing MCP server in Agent Builder:  \n \n In the Tools section, select + MCP Server.  \n Choose a connection type: \n \n Command (stdio) – run a local command that implements the MCP protocol  \n HTTP (server-sent events) – connect to a remote server implementing the MCP protocol  \n \n \n If the MCP server supports multiple tools, select the specific tool you want to use.  \n Enter your prompts and click Run to test the agent's interaction with the tool.  \n \n This integration allows your agents to fetch live data or trigger custom backend services as part of the conversation flow.  \n Build and Scaffold a New MCP Server  \n \n Want to create your own tool? Agent Builder helps you scaffold a new MCP server project:  \n \n In the Tools section, select + MCP Server.  \n Choose MCP server project.  \n Select your preferred programming language: Python or TypeScript.  \n Pick a folder to create your server project.  \n Name your project and click Create.  \n \n Agent Builder generates a scaffolded implementation of the MCP protocol that you can extend. Use the built-in VS Code debugger:  \n \n Press F5 or click Debug in Agent Builder  \n Test with prompts like:  \n System: You are a weather forecast professional that can tell weather information based on given location.  \n User: What is the weather in Shanghai?  \n \n Agent Builder will automatically connect to your running server and show the response, making it easy to test and refine the tool-agent interaction.  \n \n AI Sparks from Prototype to Production with AI Toolkit \n Building AI-powered applications from scratch or infusing intelligence into existing systems? AI Sparks is your go-to webinar series for mastering the AI Toolkit (AITK) from foundational concepts to cutting-edge techniques. \n In this bi-weekly, hands-on series, we’ll cover: \n 🚀SLMs & Local Models – Test and deploy AI models and applications efficiently on your own terms locally, to edge devices or to the cloud \n 🔍 Embedding Models & RAG – Supercharge retrieval for smarter applications using existing data. \n 🎨 Multi-Modal AI – Work with images, text, and beyond. \n 🤖 Agentic Frameworks – Build autonomous, decision-making AI systems. Watch on Demand  \n Share your feedback  \n Get started with the latest version, share your feedback, and let us know how these new features help you in your AI development journey. As always, we’re here to listen, collaborate, and grow alongside our amazing user community.   \n Thank you for being a part of this journey—let’s build the future of AI together! Join our Microsoft Azure AI Foundry Discord channel to continue the discussion 🚀  ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"4620","kudosSumWeight":1,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWlseEpaTg?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LURESkN5WQ?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXhCbnRSZg?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LXBhSnZhbQ?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LTdkTEh2Tw?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWFzNk51Tw?revision=6\"}"}}],"totalCount":6,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3OTU5LWlseEpaTg?revision=6"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"WIDE","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4407696":{"__typename":"Conversation","id":"conversation:4407696","topic":{"__typename":"BlogTopicMessage","uid":4407696},"lastPostingActivityTime":"2025-04-25T00:00:00.014-07:00","solved":false},"User:user:210546":{"__typename":"User","uid":210546,"login":"Lee_Stott","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yMTA1NDYtODM5MjVpMDI2ODNGQTMwMzAwNDFGQQ"},"id":"user:210546"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3Njk2LWlSVWd2Sg?revision=2\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3Njk2LWlSVWd2Sg?revision=2","title":"ecsblog.png","associationType":"COVER","width":1027,"height":1050,"altText":""},"BlogTopicMessage:message:4407696":{"__typename":"BlogTopicMessage","subject":"Microsoft at the European AI and Cloud Summit 2025- Düsseldorf, Germany | Microsoft Event Guide","conversation":{"__ref":"Conversation:conversation:4407696"},"id":"message:4407696","revisionNum":2,"uid":4407696,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:210546"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":122},"postTime":"2025-04-25T00:00:00.014-07:00","lastPublishTime":"2025-04-25T00:00:00.014-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Join Microsoft and community experts in-person, in one place. The European Collab Summit, European AI & Cloud Summit, and European BizApps Summit are co-located in 2025 – converging on Düsseldorf, Germany, May 26-28, 2025. \n Get ready for an exciting experience at the European Collaboration Summit, European AI & Cloud Summit, and European BizApps Summit! Taking place from May 26-28, 2025, in Düsseldorf, Germany. This event gives you the chance to explore over 250 sessions packed with insights on Microsoft 365, AI, Azure, Power Platform, Fabric, and so much more. The best part? With a small upgrade, your ticket to one conference opens the door to all three! You’ll have the flexibility to attend the sessions that excite you the most, while connecting with Microsoft experts and other tech enthusiasts along the way. Don’t miss out on this amazing opportunity to learn, grow, and network!  \n   \n The summit will feature pre-conference tutorials, keynotes, breakouts, and more—all dedicated to Copilot and AI, Power Platform, Azure and Microsoft 365 products. With the goal of over 3,000 attendees with 250 sessions across the events.   \n   \n But that's not all!! Along with the European AI and Cloud Summit, which focuses on Artificial Intelligence, Microsoft Azure, OpenAI, and Cloud Security;  European Collaboration Summit and the European BizApps Summit, which centers on the Microsoft Power Platform, Microsoft Fabric, Citizen Development, and Low Code/No Code Business Applications. See sessions from all three conferences on the sessions page.  \n   \n Kicking off on May 26 with pre-conference tutorials, the events all run May 26-28, 2025.​​​​​​​  \n Join in: The European Collab Summit 2025 | May 26-28, 2025 |European AI and CloudSummit \n   \n Since its humble beginnings in 2012 with just 200 attendees, the European Collaboration Summit has grown into the world’s largest event focused on Microsoft collaboration technologies. Originally centered on SharePoint, it quickly became a launchpad for innovations like SharePoint Server 2013 and early Office 365. Today, with over 3,000 attendees from around the globe, it’s a dynamic melting pot of professionals—from CEOs to students—gathering in Germany to connect, learn, and grow. At its core, CollabSummit champions knowledge-sharing, meaningful connections, and an inclusive community. Thank you to Adis Jugo, Mustafa Toroman, Brett Lonsdale, Margit Jugo and the wonderful teams of volunteers and sponsors that make these events happen.  \n   \n 101 on the Conference  \n \n What: European Collaboration Summit, European Cloud Summit, and European BizApps Summit \n \n \n Where: Düsseldorf, Germany CCD Congress Center, Stockumer Kirchstraße 61, 40474 Düsseldorf, Germany  \n \n \n When: May 26th-28th 2025  \n \n \n Content: Microsoft presence at the European Collab Summit (ECS) | 3 keynotes | 8 Microsoft Breakout sessions | Microsoft for Startups Booth | Women in Tech and Allies Meet Up\n \n Review all sessions, tutorials, and speakers.  \n \n \n \n \n Registration: Register today | Use the MICROSOFT15 discount code to save 15% off registration.  \n \n \n  Cost:\n \n Summit Ticket - 845 EUR \n Summit + Tutorial – 1485 EUR \n Master Pass – 1844 EUR \n Learn more about ticket prices   \n \n \n \n \n Primary X handle & official hashtag: Twitter/Instagram: @collabsummit, LinkedIn, YouTube, Facebook  \n \n   \n Note: For this guide, we’ll use their main acronym ECS to talk about the event European Collaboration Summit and be clear when highlighting content in either Collab, Cloud or Biz app side of things.  \n Microsoft keynotes  \n \n Summit Keynote\n \n The Future of AI Is Already Here  \n Speaker: Marco Casalaina, VP Products, Azure AI and AI Futurist   \n Date/Time: May 27th, 9:30am | Expo City  \n \n \n  European Collab Summit Microsoft Keynote\n \n Unlocking the Future of Work with AI and Microsoft 365  \n Speaker: Vesa Juvonen, Principal Product Manager  \n Date/Time: May 28th, 9:00am | Room 1  \n \n \n \n \n Bizapps Microsoft Keynote \n \n Reimaging the future of business applications using Generative AI  \n Speaker: Gurkan Salk, General Manager, Head of Product Copilot for Sales, Service and Finance  \n May 28th, 9:00am | Room 3  \n \n \n \n \n Cloud and AI Microsoft Keynote  \n \n Leveraging Microsoft AI: Navigating the EU AI Act and Unlocking Future Opportunities  \n Speaker: Azar Koulibaly, General Manager and Associate General Counsel  \n May 28th, 9:00am | Room 2  \n \n \n \n   \n 😎Register today | Note: Use the MICROSOFT15 discount code to save 15% off registration.  \n   \n Microsoft-led breakout sessions  \n Seize the chance to choose the sessions that perfectly match your role and interests! Every breakout session is packed with thrilling product updates, captivating demos, inspiring customer stories, invaluable best practices, and deep insights into product and solution strategies. Plus, you'll get exclusive guidance on what the future holds. Don't miss out on this exciting opportunity!  \n You can review each full agenda for  European Collab Summit sessions plus, use the event mobile app (iOS and Android) to add sessions to your schedule.  \n   \n Microsoft-led Cloud sessions  \n Professionals, entrepreneurs, and businesses can explore opportunities with Azure, Copilot, and OpenAI, enhancing their knowledge and networking. Attendees will experience demos, discussions, and insights into Microsoft's cloud strategy. The focus is on understanding the impact of cloud adoption and promoting Responsible AI.  \n   \n \n “Microsoft Defender for Cloud: Deployment Best Practices” with Dominik Hoefling | May 27. 11:00am | Room 14b   \n \n \n “Integrating AI with Semantic Kernel” With Majid Hajin | May 27. 11:00am | Room 2  \n \n \n “Build apps that don't fail in production” with Waldek Mastykarz and Garry Trinder | May 27, 12:00pm | Room 2  \n \n \n “Building an Automation Framework Using Ansible for Configuring and Installing Line of Business Appl... with Kimmo Forss | May 27, 12:00pm | Room 14a  \n \n \n “Supercharge Your Startup: Build Faster, Smarter, and Cheaper with AI Agents” with Amit Svarzenberg | May 27, 2:30pm | Room 15a  \n \n \n “You’ve built an intelligent app powered by Gen AI models—now what?” with Julia Muiruri | May 27, 3:30pm | Room 2  \n \n \n “Microsoft server protection - one agent to rule them all” with Tom Janetscheck | May 27, 4:50pm | Room 2  \n \n \n “Orchestrating Intelligence with Multi-Agent AI Workflows” with Daron Yondem | May 27, 4:50pm | Room 14b  \n \n \n “Build voice-based AI agents on Azure” with Boris Bazilevskiy | May 27, 4:50pm | Room 14a  \n \n \n “AI Agents for the Rest of Us: Building with the Azure AI Agent Service” with Korey Stegared-Pace | May 27, 5:50pm | Room 2  \n \n \n “Personalize your AI: model Fine-Tune with your data in Azure OpenAI” with Massimo Bonanni | May 28. 10:20am | Room 14b  \n \n \n “Building Application Landing zones in Azure” with Kimmo Forss | May 28. 11:20am | Room 14a  \n \n \n “How to compile models and build agentic applications capable of exploiting the power of Copilot+ PCs...” with Sam Kemp | May 28. 11:20am | Room 14b  \n \n \n “Add multi-channel communication to your AI apps” with Boris Bazilevskiy | May 28. 11:20am | Room 14b  \n \n \n “Copilot for Security - advanced automation scenarios” with Shruti Ailani and Bert-Jan Pals | May 28. 1:30pm | Room 14b  \n \n \n “From Traction to Production: Maturing your LLMOps step by step” with Maxim Salnikov | May 28. 1:30pm | Room 16a  \n \n \n “Device Intelligence with SLM: A Path to Edge Deployment and Cloud Integration” with Lee Stott | May 28. 1:30pm | Room 1  \n \n \n “Measure and mitigate risks for a generative AI app” with Carlotta Castelluccio | May 28. 2:50pm | Room 2  \n \n \n “Build Serverless AI Agents with Semantic Kernel & Azure Cosmos DB” with Mark Brown | May 28. 2:50pm | Room 14b  \n \n   \n Microsoft-led Collab sessions  \n Ensuring your organization is fully prepared to harness the capabilities of Copilot for Microsoft 365 is vital. The upcoming sessions are designed to focus on technical readiness, offering the latest insights and best practices. Our experts will guide you on how to effectively utilize AI to unlock the full potential of Copilot and maximize its benefits for your organization.  \n \n “AI Beginner Development Powerclass” with Carlotta Castelluccio, Korey Stegared-Pace, and Lee Stott | May 26, 9:00am | Room 6  \n \n \n “Building experiences for the Microsoft 365 Powerclass” with Vesa Juvonen, Hugo Bernier, David Warner II, Paolo Pialorsi, Stephan Bisser, Thomas Goelles, Derek Cash-Peterson, and Julie M Turner | May 26, 9:00am | Room 8  \n \n \n “Microsoft 365 Copilot extensibility using VS Code - hands-on workshop” with Waldek Mastykarz, Paolo Pialorsi, and Garry Trinder | May 26, 9:00am | Room 16a  \n \n \n “Microsoft Cloud Security Powerclass” with Tom Janetscheck and Jussi Roine  \n \n \n “Copilot in Dynamics 365 Finance” with Severin Bock | May 26, 9:00am | Room 18a+b  \n \n \n “Build Your Own Agent Using Microsoft Copilot Studio and Power Platform!” with Henry Jammes, Damien Bird, Bülent Altinsoy, Dewain Robinson, and Daniel Laskewitz | May 26, 9:00am | Room 17a+b  \n \n \n “Am I Entitled? How to manage permissions dynamically in the age of Copilot” with Al Eardley | May 27, 11:00am | Room 17b  \n \n \n “Latest platform and extensibility options for SharePoint and Viva Connections” with Vesa Juvonen | May 27, 11:00am | Room 1  \n \n \n “Secure and govern Microsoft 365 Copilot” with Erica Toelle | May 27, 12:00pm | Room 16b  \n \n \n “What's New and Next for Engage and Teams: Knowledge, Storyline, Communities, Copilot and Moderation... with Dan Holme | May 27, 12:00pm | Room 1  \n \n \n “What's New and Next for Engage and Teams: Communications, Channels, Leadership, Campaigns and Events” with Dan Holme | May 27, 2:30pm | Room 1  \n \n \n “Maximizing your Information Architecture Strategy with Microsoft 365 Content Features for Copilot a... with Mikael Svenson and Kasper Larsen | May 27, 3:30pm | Room 18b  \n \n \n “Extensibility Options to Improve Your Employee Experiences within Viva Connections and SharePoint” with Vesa Juvonen | May 27, 3:30pm | Room 16b  \n \n \n “Insider Risk Management - Technical Deep Dive” with Bernd Vellguth | May 27, 4:50pm | Room 19a  \n \n \n “Unlocking the Potential of People Data in Microsoft 365” with Wictor Wilén | May 27, 5:50pm | Room 1  \n \n \n “Microsoft Defender for Office 365 - Defense in-depth\" with Dominik Hoefling | May 27, 5:50pm | Room 19a  \n \n \n “The intranet of tomorrow: Beautiful, flexible, and AI ready” with Vesa Juvonen | May 27, 5:50pm | Room 16b  \n \n \n “Designing Business-Centric Solutions with Microsoft 365 Copilot” with Andreas Krüger | May 28, 10:20am | Room 17b  \n \n \n “Extending Microsoft 365 Copilot” with Paolo Pialorsi | May 27, 11:00am | Room 16b  \n \n \n “How well do Copilot and Agents know you and your team?” with Wictor Wilén | May 28, 11:20am | Room 1  \n \n \n “Extending Microsoft 365 Copilot with Declarative Agents” with Vesa Juvonen and Paolo Pialorsi | May 28, 11:20am | Room 16b  \n \n \n “Together We Succeed: Harnessing Community for Career Success” with Vesa Juvonen, Garry Trinder, and Waldek Mastykarz | May 28th, 1:30pm | Run Events Stage (Expo)  \n \n \n “SharePoint Embedded - API for your applications” with Dragan Panjkov | May 28, 2:50pm | Room 18a  \n \n   \n   \n Microsoft-led BizApps sessions   \n Browse these sessions to learn about Power Platform, Power BI, Microsoft Fabric, Business Apps, Dynamics 365, and Citizen Development.  \n   \n \n “Modernize your Contact Center with Dynamics 365” with Ivica Ivančić | May 27. 11:00am | Room 6  \n \n \n “Unlocking the Power of AI in Microsoft Fabric” with Josh Ndemenge | May 27, 12:00pm | Room 8  \n \n \n “Building Power Apps in the Modern Era” with April Dunnam | May 27, 12:00pm | Room 3  \n \n \n “Copilot in Dynamics 365 Finance” with Severin Bock | May 27, 2:30pm | Room 7b  \n \n \n “Mission UX: Decoding the Science of User Experience in Microsoft 365 and Power Platform” with David Warner II and Hugo Bernier | May 27, 2:30pm | Room 3  \n \n \n “Unleash the power of Custom Actions in Power Automate Desktop” with Dieter De Cock | May 27, 2:30pm | Room 5  \n \n \n “Quickstart to Microsoft Power Pages” with Dragan Panjkov | May 27, 3:30pm | Room 7a  \n \n \n “Building Secure and Reliable Copilot Agents created with Copilot Studio” with Marco Rocca and Fabio Franzini | May 27, 5:50pm | Room 5  \n \n \n “Innovating with Power Platform's Copilot Studio: Extending and Enhancing SAP with Intelligent Agent... with Marysol Mantilla | May 28. 11:20am | Room 5  \n \n \n “The art of crafting effective prompts for your Power Platform AI tools” with April Dunnam | May 28. 11:20am | Room 3  \n \n \n “Copilot Studio - You Can't Improve What You Can't Measure” with Henry Jammes | May 28. 1:30pm | Room 3  \n \n \n “Transforming Document Management in Power Platform with Intelligent Automation” with Marco Rocca and Fabio Franzini | May 28. 3:50pm | Room 6  \n \n   \n European AI and Cloud Summit startup stage, Powered by Microsoft for Startups  \n Supported and co-organized by ECS and Microsoft for Startups, the Microsoft Startup Stage dynamic space is where major industry players connect to explore groundbreaking solutions. on Day1 we will introduce current Microsoft Startup AI Partners and Microsoft Startups highlighting how startups, engage with potential investors and build AI solutions, and learn from visionary thought leaders in AI and cloud computing.     On Day 2 we have dedicated AI Startup pitch competition at the end of the day the Startup Pitch Competition winners will receive prestigious awards, including membership in the Microsoft for Startups Program, unlocking exclusive resources, mentorship, and growth opportunities.  \n  Showcasing Microsoft Pegasus Startups   \n \n Holistic AI  \n Synthesized  \n \n Tips for Attendees   \n \n Introduce Yourself \n \n Your unique insights matter! Engage with others and share your perspective.  \n \n \n Participate Fully \n \n Put away your laptops and stay focused. Immerse yourself in sessions for in-depth learning, tips, and tricks.  \n \n \n Share your Knowledge \n \n Don’t hesitate to offer your expertise. Sharing what you know can help others and strengthen the community.  \n \n \n Ask Questions and Provide Feedback \n \n Your inquiries and suggestions can shape the future of our products. Don’t hold back—your voice matters!  \n \n \n Stay Hydrated and Dress Comfortably\n \n Keep your energy up and your mind sharp. Dress for movement to enjoy the full experience.  \n \n \n \n   \n Learn more  \n Visit CollabSummit.eu and follow the action on X/Twitter: @CollabSummit / #CollabSummit, @Microsoft365, @MSFTCopilot, @SharePoint, @OneDrive, @MicrosoftTeams, @MSPowerPlat, @Microsoft365Dev, and @MSFTAdoption.  \n   \n We hope to see you in Germany for one of the most impactful events of the year! The European Collaboration Summit offers unique opportunities to connect with industry leaders, explore innovations, and gain insights that can transform your career. With tailored sessions, hands-on demos, and discussions on collaboration tools, it’s the perfect platform to stay ahead of trends. Don’t miss the chance to join a thriving community and unlock your potential!  \n Don't miss out on this incredible opportunity – register today and take advantage of the exclusive discount!   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"16460","kudosSumWeight":1,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3Njk2LWlSVWd2Sg?revision=2\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA3Njk2LWlSVWd2Sg?revision=2"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4404086":{"__typename":"Conversation","id":"conversation:4404086","topic":{"__typename":"BlogTopicMessage","uid":4404086},"lastPostingActivityTime":"2025-04-14T08:30:09.277-07:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LUxBWHFHaQ?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LUxBWHFHaQ?revision=3","title":"AiAgentsImages_FriendlyRobot.png","associationType":"COVER","width":1920,"height":1080,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LTJwbEFQTw?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LTJwbEFQTw?revision=3","title":"BuildMultiAgent.png","associationType":"BODY","width":1920,"height":1080,"altText":""},"BlogTopicMessage:message:4404086":{"__typename":"BlogTopicMessage","subject":"Week 2 . Microsoft Agents Hack Online Events and Readiness Resources","conversation":{"__ref":"Conversation:conversation:4404086"},"id":"message:4404086","revisionNum":3,"uid":4404086,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:210546"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Readiness and skilling events for Week 2: Microsoft AI Agents Hack \n\nRegister Now at https://aka.ms/agentshack","metrics":{"__typename":"MessageMetrics","views":645},"postTime":"2025-04-14T08:24:08.328-07:00","lastPublishTime":"2025-04-14T08:30:09.277-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" https://aka.ms/agentshack \n \n 2025 is the year of AI agents! But what exactly is an agent, and how can you build one? Whether you're a seasoned developer or just starting out, this FREE three-week virtual hackathon is your chance to dive deep into AI agent development. Register Now: https://aka.ms/agentshack \n 🔥 Learn from expert-led sessions streamed live on YouTube, covering top frameworks like Semantic Kernel, Autogen, the new Azure AI Agents SDK and the Microsoft 365 Agents SDK. \n Week 2 Events: April 14th-18th \n Day/Time Topic Track 4/14 08:00 AM PT Building custom engine agents with Azure AI Foundry and Visual Studio Code Copilots 4/15 07:00 AM PT Your first AI Agent in JS with Azure AI Agent Service JS 4/15 09:00 AM PT Building Agentic Applications with AutoGen v0.4 Python 4/15 12:00 PM PT AI Agents + .NET Aspire C# 4/15 03:00 PM PT Prototyping AI Agents with GitHub Models Python 4/16 04:00 AM PT Multi-agent AI apps with Semantic Kernel and Azure Cosmos DB C# 4/16 06:00 AM PT Building declarative agents with Microsoft Copilot Studio & Teams Toolkit Copilots 4/16 07:00 AM PT Prompting is the New Scripting: Meet GenAIScript JS 4/16 09:00 AM PT Building agents with an army of models from the Azure AI model catalog Python 4/16 12:00 PM PT Multi-Agent API with LangGraph and Azure Cosmos DB Python 4/16 03:00 PM PT Mastering Agentic RAG Python 4/17 06:00 AM PT Build your own agent with OpenAI, .NET, and Copilot Studio C# 4/17 09:00 AM PT Building smarter Python AI agents with code interpreters Python 4/17 12:00 PM PT Building Java AI Agents using LangChain4j and Dynamic Sessions Java 4/17 03:00 PM PT Agentic Voice Mode Unplugged Python ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1799","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LUxBWHFHaQ?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LTJwbEFQTw?revision=3\"}"}}],"totalCount":2,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDA0MDg2LUxBWHFHaQ?revision=3"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4393476":{"__typename":"Conversation","id":"conversation:4393476","topic":{"__typename":"BlogTopicMessage","uid":4393476},"lastPostingActivityTime":"2025-03-24T22:00:00.014-07:00","solved":false},"User:user:102838":{"__typename":"User","uid":102838,"login":"AnthonyBartolo","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMDI4MzgtVDFTYjdv?image-coordinates=0%2C0%2C400%2C400"},"id":"user:102838"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTliaXlMOQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTliaXlMOQ?revision=18","title":"Microsoft AI Tour Resources 003.png","associationType":"COVER","width":960,"height":663,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVYySVpVcg?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVYySVpVcg?revision=18","title":"MSAITour-BRK460.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXlhVEt3Wg?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXlhVEt3Wg?revision=18","title":"MSAITour-BRK431.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTNjTTJQUw?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTNjTTJQUw?revision=18","title":"MSAITour-BRK440.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWk1YUJMdA?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWk1YUJMdA?revision=18","title":"MSAITour-BRK441.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTRmOW9OMQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTRmOW9OMQ?revision=18","title":"MSAITour-BRK443.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXpmTGNEVw?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXpmTGNEVw?revision=18","title":"MSAITour-BRK451.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTdOWXdQZQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTdOWXdQZQ?revision=18","title":"MSAITour-BRK430.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUJQVzFwNQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUJQVzFwNQ?revision=18","title":"MSAITour-BRK453.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVFMWHI1aA?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVFMWHI1aA?revision=18","title":"MSAITour-BRK420.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZrWGF5Yg?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZrWGF5Yg?revision=18","title":"MSAITour-BRK432.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVpvMXZ5Rg?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVpvMXZ5Rg?revision=18","title":"MSAITour-WRK530.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVBDOVQ1QQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVBDOVQ1QQ?revision=18","title":"MSAITour-WRK540.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW84T0VqYw?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW84T0VqYw?revision=18","title":"MSAITour-WRK560.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZxV2I4WA?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZxV2I4WA?revision=18","title":"MSAITour-WRK550.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXA3cE8wUQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXA3cE8wUQ?revision=18","title":"MSAITour-WRK551a.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWplOEs5ag?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWplOEs5ag?revision=18","title":"MSAITour-WRK552a.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWs3V29ITA?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWs3V29ITA?revision=18","title":"genai-beginners.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW5BOXlEWQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW5BOXlEWQ?revision=18","title":"aiagents-beginners.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LURETmZ3MQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LURETmZ3MQ?revision=18","title":"clipboard_image-1-1742163334419.png","associationType":"BODY","width":225,"height":225,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVNoUlJ4Nw?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVNoUlJ4Nw?revision=18","title":"clipboard_image-2-1742163334418.png","associationType":"BODY","width":225,"height":225,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXFZTGxjUQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXFZTGxjUQ?revision=18","title":"clipboard_image-3-1742163334415.png","associationType":"BODY","width":225,"height":225,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTgxR3NESg?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTgxR3NESg?revision=18","title":"MasterGHCP.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUtDZjZCeA?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUtDZjZCeA?revision=18","title":"CopilotAdventures.png","associationType":"BODY","width":450,"height":450,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVd0aUpQUQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVd0aUpQUQ?revision=18","title":"Cybersecurity-beginners.png","associationType":"BODY","width":450,"height":450,"altText":""},"BlogTopicMessage:message:4393476":{"__typename":"BlogTopicMessage","subject":"Essential Microsoft Resources for MVPs & the Tech Community from the AI Tour","conversation":{"__ref":"Conversation:conversation:4393476"},"id":"message:4393476","revisionNum":18,"uid":4393476,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:102838"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Unlock the power of Microsoft AI with redeliverable technical presentations, hands-on workshops, and open-source curriculum from the Microsoft AI Tour! Whether you’re a Microsoft MVP, Developer, or IT Professional, these expertly crafted resources empower you to teach, train, and lead AI adoption in your community. \n Explore top breakout sessions covering GitHub Copilot, Azure AI, Generative AI, and security best practices—designed to simplify AI integration and accelerate digital transformation. Dive into interactive workshops that provide real-world applications of AI technologies. \n Take it a step further with Microsoft’s Open-Source AI Curriculum, offering beginner-friendly courses on AI, Machine Learning, Data Science, Cybersecurity, and GitHub Copilot—perfect for upskilling teams and fostering innovation. \n Don’t just learn—lead. Access these resources, host impactful training sessions, and drive AI adoption in your organization. Start sharing today! Explore now: Microsoft AI Tour Resources. ","introduction":"Access redeliverable technical presentations and open-source curriculum from the Microsoft AI Tour—essential resources to help MVPs and others in the community teach the community how to adopt Microsoft AI services.","metrics":{"__typename":"MessageMetrics","views":600},"postTime":"2025-03-24T22:00:00.014-07:00","lastPublishTime":"2025-03-24T22:00:00.014-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Did you attend a Microsoft AI Tour stop? Did you enjoy the content delivered? \n Did you know that the same technical presentations, open-source curriculum, and hands-on workshops you experienced are now available for you to redeliver and share with your community? \n Whether you're a Microsoft MVP, Developer, or IT Professional, these resources make it easier than ever to equip fellow professionals with the skills to successfully adopt Microsoft AI services. \n From expert-led skilling sessions to interactive networking opportunities, the Microsoft AI Tour offers more than just knowledge—it fosters collaboration and real-world impact. By delivering these sessions, you can help audiences simplify AI adoption, accelerate digital transformation, and drive innovation within their organizations. Whether you’re looking to host workshops, lead technical training, or explore AI-driven solutions, these resources are designed to be practical, impactful, and easy to share. \n Here is a collection of the top Microsoft AI Tour resources that will help you empower the next wave of AI innovators and deliver engaging and dynamic learning experiences to your audiences. \n Microsoft AI Tour Top 10 Breakout Presentations \n The breakout presentations delivered at the Microsoft AI Tour were designed to provide attendees with in-depth knowledge and practical skills in various AI technologies. The full list of breakout presentations can be found here: https://aka.ms/aitourbreakouts    \n \n Session \n \n Title \n \n Link \n \n QR Code \n BRK460   Microsoft Fabric: what's new and what's next Microsoft Fabric is changing data teams' landscape by providing an integrated platform to enable collaboration among data, AI, BI and application development professionals. Join us to learn and see the latest announcements and what the future holds.   https://aka.ms/AITour-BRK460   QR Code\n   \n BRK431    Essential prompting for GitHub Copilot in VS Code Copilot can do a lot for you - but what does \"a lot\" even mean? In this talk you'll learn the basics of prompting Copilot, as well as more advanced topics, including brainstorming architecture, documenting code, and creating a database out of a CSV.   https://aka.ms/AITour-BRK431   QR Code BRK440   Getting started with Generative AI in Azure Discover the basics of generative AI, including core models, functionalities, and how they work. Learn how to utilize these models within the Azure ecosystem, leveraging various services to build your own generative AI applications.   https://aka.ms/AITour-BRK440   QR Code\n   \n BRK441   Build AI solutions with Azure AI Foundry When developing a generative AI application, selecting the right model is an essential first step. However, the true differentiator lies in how you utilize your input. In this session, you will discover how to maximize the potential of your model through advanced prompt engineering techniques, integrating your model with various data sources, and enabling it to perform actionable tasks. Additionally, you will learn how to leverage Azure AI Foundry as the ideal platform to start building custom AI solutions.   https://aka.ms/AITour-BRK441   QR Code\n   \n BRK443   Build your code-first app with Azure AI Agent Service Picture an AI system that not only comes up with creative and clear responses but also makes decisions and takes action. Step into the future of AI and see how you can tap into the full power of LLMs, by creating your AI agent.   https://aka.ms/AITour-BRK443   QR Code\n   \n BRK451   Code-first LLMOps from prototype to production Learn to build and test multi-model LLM (agent) applications from prototype to production with prompt flow, prompty, and VS Code. Use new LLMOps tooling for debugging, evaluation, deployment, and monitoring to ensure performance and safety, and collect production signals.   https://aka.ms/AITour-BRK451   QR Code\n   \n BRK430   Build and customize agents with Copilot Studio Learn how to build your own agent using the latest features and updates from Copilot Studio. Explore how to leverage generative AI to create engaging, intelligent, and connected assistants for your employees and customers.   https://aka.ms/AITour-BRK430   QR Code\n   \n BRK453   Explore cutting-edge models: LLMs, SLMs, and more There are many Generative AI models: LLMs, SLMs, proprietary, open, cloud-based, on-device, text, code, image, and multimodal. Learn how to choose the right model for your needs and about tools to evaluate and compare models for specific tasks.   https://aka.ms/AITour-BRK453   QR Code\n   \n BRK420   Securing AI applications on Azure Discover the best practices for securely deploying AI apps to Azure: keyless access to Azure AI, user auth with Microsoft Entra, AI safety with content safety filters and jailbreak detection, private network deployment, and Microsoft Defender.   https://aka.ms/AITour-BRK420   QR Code\n   \n BRK432 Boost Your Coding Skills with Visual Studio & GitHub Copilot Learn how to use GitHub Copilot to tackle performance issues in an ecommerce app. This session covers adding tests, interacting with Copilot chat, and editing multiple files simultaneously. Discover the latest Copilot extensions and streamline your workflow with Visual Studio and GitHub Copilot   https://aka.ms/AITour-BRK432   QR Code\n   \n \n   \n Microsoft AI Tour Top 6 Workshops \n The Microsoft AI Tour workshops were designed as 75-minute hands-on sessions, giving attendees the opportunity to work directly with AI technologies and apply practical knowledge to seamlessly adopt Microsoft AI services. \n   \n \n Session \n \n Title \n \n Link \n \n QR Code \n WRK530   Build and extend agents with Microsoft Copilot Studio Get hands on with Copilot Studio and learn how to build and publish your own custom agent. You’ll also see how with Visual Studio you can create custom connectors to integrate with your line of business systems.   https://aka.ms/AITour-WRK530   QR Code\n   \n WRK540   Interacting with multimodal models in Azure AI Foundry Innovate with Azure OpenAI's latest multimodal models in this hands-on experience in Azure AI Foundry. Learn the core concepts and best practices to effectively generate with text, sound, and images using GPT-4o-mini, DALL-E and GPT-4o-realtime. Create AI agents that enhance user experiences and drive innovation.   https://aka.ms/AITour-WRK540   QR Code\n   \n WRK560   Microsoft Fabric: start with real-time Intelligence Microsoft Fabric's Real-Time Intelligence lets you handle streams of data in real time. This workshop covers how to use Real-Time hub, KQL, and Power BI to ingest, query and process data while setting alerts, building dashboards, and reports from it.   https://aka.ms/AITour-WRK560   QR Code\n   \n WRK550   Build a copilot code-first with Azure AI Foundry Use Azure AI Studio to build, evaluate, and deploy a customer support chat app. This custom copilot uses a RAG architecture built with Azure AI Search, Azure CosmosDB and Azure OpenAI to return responses grounded in the product and customer data.   https://aka.ms/AITour-WRK550   QR Code\n   \n WRK551   Build a multi-tasking assistant with Azure OpenAI Learn about AI Agents, an approach that gives LLMs tools to carry out tasks. Build a Python writing assistant app to take a user topic, use agents for research, product search, writing, and editing, and present a refined article.   https://aka.ms/AITour-WRK551a   QR Code\n   \n WRK552   Build your first agent with Azure AI Agent Service Dive into the world of intelligent conversational agents with Azure AI Agent Service, a seamless blend of service and SDK that simplifies the development of robust AI-driven solutions. In this hands-on workshop, you’ll learn to create a powerful agent capable of answering sales-related queries, performing data analysis, generating visualizations, and integrating external data sources to deliver enhanced business insights.   https://aka.ms/AITour-WRK552a   QR Code\n   \n \n Empower Your Community with Microsoft’s Open-Source AI Curriculum \n Microsoft’s Open-Source AI Curriculum helps MVPs, developers, and IT professionals equip their communities with essential AI skills. Covering topics like AI agents, Generative AI, Machine Learning, and GitHub Copilot tips and tricks. These redeliverable, hands-on resources make it easy to train colleagues, lead workshops, and accelerate AI adoption. With structured lessons and real-world coding exercises, you can simplify AI education, drive innovation, and expand your impact. Start using these resources today to empower the next generation of AI engineers. \n   \n  Curriculum Name  Link QR Code  Generative AI for Beginners Learn Generative AI app development with Microsoft's 21-lesson course. Learn key AI concepts in \"Learn\" lessons and apply them with hands-on coding in \"Build\" lessons using Python and TypeScript. Ideal for developers seeking AI expertise! https://aka.ms/genai-beginners    QR Code\n   \n AI Agents for Beginners  Learn to build AI Agents with this 10-lesson course, covering essential topics in an easy-to-follow format—start anywhere! Multi-language support is available. https://aka.ms/aiagents-beginners  QR Code\n   \n AI for Beginners This 12-week curriculum teaches the fundamentals of Artificial Intelligence (AI). Explore various approaches, including neural networks and deep learning, with practical implementation in popular frameworks like TensorFlow and PyTorch. In addition, you will learn about AI applications in image and text processing, as well as the lesser-known techniques of genetic algorithms and multi-agent systems.    https://aka.ms/ai-beginners for Beginners QR Code Data Science for Beginners  This 12-week curriculum teaches the fundamentals of Data Science and covers basic principles of data science, including ethical concepts, data preparation, different ways of working with data, data visualization, data analysis, real-world use cases of data science, and more.    https://aka.ms/datascience-beginners  QR Code Machine Learning for Beginners This 12-week curriculum teaches classic machine learning concepts, using primarily Scikit-learn as a library and avoiding deep learning. Pairs well with the AI for Beginners and Data Science for Beginners curriculum.   https://aka.ms/ml-beginners  QR Code Mastering GitHub Copilot Gain knowledge on GitHub Copilot use with our 10-lesson course. Learn to integrate AI-driven coding assistance, boost collaboration with Visual Studio Code, and enhance code quality with best practices. Unlock advanced features, real-time collaboration, and AI automation to accelerate your coding skills. Perfect for developers looking to streamline workflows with AI. https://aka.ms/MasterGHCP    QR Code\n   \n Copilot Adventures Explore coding adventures while mastering new concepts and languages with GitHub Copilot. Follow your Copilot Adventure description, tackle high-level tasks, and use Copilot hints to streamline coding. Unlock smarter, faster coding today! https://aka.ms/CopilotAdventures  QR Code\n   \n Cybersecurity for Beginners  Boost your cybersecurity skills in the AI era with this vendor-agnostic course! Learn essential security concepts through bite-sized lessons (30-60 mins each), complete with quizzes and additional resources. Perfect for beginners looking to protect IT systems and advance their knowledge.   https://aka.ms/Cybersecurity-beginners    QR Code\n   \n \n Empower, Educate, and Innovate: Leverage Microsoft AI Resources Today \n Whether you're an MVP, developer, or IT professional, these resources empower you to drive AI adoption, simplify complex concepts, and spark innovation. Take advantage of these ready-to-deliver materials to upskill your peers, host workshops, or explore AI-driven solutions. By sharing this knowledge, you help shape the future of AI and strengthen the global tech community. Start today—access the materials, engage with your audience, and make a lasting impact with Microsoft’s AI resources! \n t AI Tour Resources\n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"12867","kudosSumWeight":3,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTliaXlMOQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVYySVpVcg?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXlhVEt3Wg?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTNjTTJQUw?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWk1YUJMdA?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTRmOW9OMQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXpmTGNEVw?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTdOWXdQZQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUJQVzFwNQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVFMWHI1aA?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZrWGF5Yg?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVpvMXZ5Rg?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVBDOVQ1QQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW84T0VqYw?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUZxV2I4WA?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE2","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXA3cE8wUQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE3","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWplOEs5ag?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE4","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LWs3V29ITA?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE5","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LW5BOXlEWQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LURETmZ3MQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVNoUlJ4Nw?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LXFZTGxjUQ?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTgxR3NESg?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LUtDZjZCeA?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LVd0aUpQUQ?revision=18\"}"}}],"totalCount":26,"pageInfo":{"__typename":"PageInfo","hasNextPage":true,"endCursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI1","hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkzNDc2LTliaXlMOQ?revision=18"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4373254":{"__typename":"Conversation","id":"conversation:4373254","topic":{"__typename":"BlogTopicMessage","uid":4373254},"lastPostingActivityTime":"2025-02-24T12:15:54.914-08:00","solved":false},"User:user:141713":{"__typename":"User","uid":141713,"login":"chilberto","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xNDE3MTMtMTM1MjIzaTcyQzg5OTRBRUQ5QjRFNTk"},"id":"user:141713"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzczMjU0LWgxV0hQZw?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzczMjU0LWgxV0hQZw?revision=6","title":"url_upload.png","associationType":"BODY","width":1021,"height":656,"altText":""},"BlogTopicMessage:message:4373254":{"__typename":"BlogTopicMessage","subject":"Mastering API Management - Demos and best practices (presentation highlight)","conversation":{"__ref":"Conversation:conversation:4373254"},"id":"message:4373254","revisionNum":6,"uid":4373254,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:141713"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" I recently had the opportunity to present at the Wellington .NET User Group about Azure API Management (APIM) and common pitfalls I see teams encounter. A key takeaway is that all aspects of a solution, including APIM, should be under source control to ensure consistency, collaboration, and reliability. \n APIOps is a DevOps approach for managing APIs in APIM, focusing on automation, CI/CD, and version control. Many teams either reinvent their own solutions or avoid versioning APIM altogether due to a lack of awareness or time to adopt APIOps. My advice: take the time to evaluate APIOps before rolling your own—it's a flexible, open-source project with an active community. ","introduction":"Community highlight for a presentation on Azure API Management service using APIOps including best practices and patterns for source control, CI/CD, and other concerns.","metrics":{"__typename":"MessageMetrics","views":718},"postTime":"2025-02-24T12:15:54.914-08:00","lastPublishTime":"2025-02-24T12:15:54.914-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" I was fortunate to present to the Wellington .Net User Group about my experience using the Azure API Management (APIM) service. In the presentation I cover some of the aspects that I often see teams re-invent solutions, and in my opinion, misuse Azure APIM.  \n Mastering Azure API Management - Demos and Best practices \n Why am I highlighting this again? \n All aspects of a solution should be under source control to ensure consistency, collaboration, and reliability. Azure APIM is not an exception. APIOps, or Azure API Management (APIM) with DevOps, is a DevOps approach for managing APIs in Azure API Management (APIM). The focus of APIOps is on automation, CI/CD, and version control for APIs.  \n The guidance here is adopt a strategy for APIM as early as possible as well as don't reinvent. APIOps is a flexible, open source project with an active and engaged community. Most of the organizations I work with have either wrote their own solution or have gone without putting APIM under versioned source control with automated CI/CD. The main reason for this is the team have not allowed themselves the time to learn and adopt APIOps. \n So take the time to fully evaluate APIOps before rolling your own and never go without. \n Here are some references to help you get started: \n \n APIOps - Basic Concepts \n \n \n \n This page in the wiki gives you an idea of the content and structure of how the resources are saved to files. \n Spend the time to read and watch the video on the GitHub readme as a good starting point \n \n And, like always, let me know if you agree or disagree by commenting below.  \n Cheers! ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"1634","kudosSumWeight":1,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzczMjU0LWgxV0hQZw?revision=6\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4375946":{"__typename":"Conversation","id":"conversation:4375946","topic":{"__typename":"BlogTopicMessage","uid":4375946},"lastPostingActivityTime":"2025-02-20T07:57:48.242-08:00","solved":false},"User:user:2558509":{"__typename":"User","uid":2558509,"login":"vinayakh","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yNTU4NTA5LTYxODM4MGkxQ0ZCNjVFREU2RjhENkVF"},"id":"user:2558509"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzc1OTQ2LUJ4YmxtbA?revision=10\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzc1OTQ2LUJ4YmxtbA?revision=10","title":"AI Sparks - Banner.jpg","associationType":"COVER","width":1920,"height":1080,"altText":""},"BlogTopicMessage:message:4375946":{"__typename":"BlogTopicMessage","subject":"AI Sparks: AI Toolkit for VS Code - from playground to production","conversation":{"__ref":"Conversation:conversation:4375946"},"id":"message:4375946","revisionNum":10,"uid":4375946,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:2558509"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"We’re excited to announce a new live webinar series on building AI applications—taking you from playground to production using the AI Toolkit for VS Code. Starting February 13, 2025, we’ll hosting a webinar every two weeks, each running for approximately an hour. Each session will focus on a key topic for AI developers, combining concept overviews, live demos, and interactive Q&A. \n\nJoin us to explore the latest techniques and best practices in AI development!","metrics":{"__typename":"MessageMetrics","views":707},"postTime":"2025-02-11T00:00:00.015-08:00","lastPublishTime":"2025-02-20T07:57:48.242-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Are you building AI-powered applications from scratch or infusing intelligence into existing production code and systems?  AI Sparks is your go-to webinar series for mastering the AI Toolkit (AITK) for VS Code from foundational concepts to cutting-edge techniques. \n In this bi-weekly, hands-on series, we’ll cover: \n SLMs & Local Models – Test and deploy AI models and applications efficiently on your own terms locally, to edge devices or to the cloud \n Embedding Models & RAG – Supercharge retrieval for smarter applications using existing data. \n Multi-Modal AI – Work with images, text, and beyond. \n Agentic Frameworks – Build autonomous, decision-making AI systems. \n What will you learn from this session? Whether you're a developer, startup founder, or AI enthusiast, you'll gain practical insights, live demos, and actionable takeaways to level up your AI integration journey. \n Join us and spark your AI transformation! \n You can click here and register for the entire series on the reactor page  \n Episode list \n You can also sign up for the individual episode and read about the topics covered using the following links: \n Feb 13 th 2025 – WATCH ON DEMAND @ Introduction to AI toolkit and feature walkthrough \n In In this episode, we’ll introduce the AI Toolkit extension for VS Code—a powerful way to explore and integrate the latest AI models from OpenAI, Meta, Deepseek, Mistral, and more. With this extension, you can browse state-of-the-art models, download some for local use, or experiment with others remotely. Whether you're enhancing an existing application or building something new, the AI Toolkit simplifies the process of selecting and integrating the right model for your needs. \n Feb 27 th 2025 – A short introduction to SLMs and local model with use cases \n In this episode, we’ll explore Small Language Models (SLMs) and how they compare to larger models. SLMs are efficient, require less compute and memory, and can run on edge devices while still excelling at a variety of tasks. We’ll dive into the Phi-3.5 and Phi-4 model series and demonstrate how to build a practical application using these models. \n Mar 13 th 2025 – How to work with embedding models and build a RAG application \n In this episode, we’ll dive into embedding models—important tools for working with vector databases and large language models. These models convert text into numerical representations, making it easier to process and retrieve information efficiently. After covering the core concepts, we’ll apply them in practice by building a Retrieval-Augmented Generation (RAG) app using Small Language Models (SLMs) and a vector database. \n Mar 27 th 2025 – Multi-modal support and image analysis \n In this episode, we’ll dig deeper into multi-modal capabilities of local and remote AI models and use visualization tools for better insights. We’ll also dive into multi-modal support in the AI Toolkit, showcasing how to process and analyze images alongside text. By the end, you’ll see how these capabilities come together to enhance powerful AI applications. \n Apr 10 th 2025 – Evaluations – How to choose the best model for you applications needs \n In this episode, we’ll explore how to evaluate AI models and choose the right one for your needs. We’ll cover key performance metrics, compare different models, and demonstrate testing strategies using features like Playground, Bulk Run, and automated evaluations. Whether you're experimenting with the latest models or transitioning to a new version, these evaluation techniques will help you make informed decisions with confidence. \n Apr 24 th 2025 – Agents and Agentic Frameworks  \n In this episode, we’ll explore agents and agentic frameworks—systems that enable AI models to make decisions, take actions, and automate complex tasks. We’ll break down how these frameworks work, their practical applications, and how to build and integrate them into your projects. By the end, you’ll have a clear understanding of how to build and leverage AI agents effectively. We will explore how to use and build agentic frameworks using AI Toolkit. \n Resources \n \n AI toolkit for VSCode - https://aka.ms/AIToolkit \n AI toolkit for VSCode Documentation - https://aka.ms/AIToolkit/doc \n Building Retrieval Augmented Generation (RAG) apps on VSCode & AI Toolkit \n  Understanding and using Reasoning models such as DeepSeek R1 on AI toolkit -  \n  Using Ollama and OpenAI, Google and Anthropic hosted models with AI toolkit \n AI Sparks - YouTube Playlist \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"4568","kudosSumWeight":0,"repliesCount":2,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzc1OTQ2LUJ4YmxtbA?revision=10\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzc1OTQ2LUJ4YmxtbA?revision=10"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4370104":{"__typename":"Conversation","id":"conversation:4370104","topic":{"__typename":"BlogTopicMessage","uid":4370104},"lastPostingActivityTime":"2025-01-29T02:43:13.339-08:00","solved":false},"User:user:1596899":{"__typename":"User","uid":1596899,"login":"Gabriela_de_Queiroz","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xNTk2ODk5LTU5OTIzMWlFRkQ2Q0IwQTAyQ0E2Rjg4"},"id":"user:1596899"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzcwMTA0LTNuQlVIMg?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzcwMTA0LTNuQlVIMg?revision=5","title":"2flyer copy.png","associationType":"COVER","width":1280,"height":652,"altText":""},"BlogTopicMessage:message:4370104":{"__typename":"BlogTopicMessage","subject":"Microsoft Startup Spotlight Live Series","conversation":{"__ref":"Conversation:conversation:4370104"},"id":"message:4370104","revisionNum":5,"uid":4370104,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:1596899"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Bi-weekly conversations with 𝗳𝗼𝘂𝗻𝗱𝗲𝗿𝘀 𝗳𝗿𝗼𝗺 𝗔𝗜 𝘀𝘁𝗮𝗿𝘁𝘂𝗽𝘀 to explore their journeys, the technologies they’re creating, and the challenges they’re solving.","metrics":{"__typename":"MessageMetrics","views":132},"postTime":"2025-01-29T02:43:13.339-08:00","lastPublishTime":"2025-01-29T02:43:13.339-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" As a founder, developer, or AI enthusiast, have you ever wondered what AI startups are solving, the technologies they use, or the journeys their founders have taken? How do they tackle challenges and create impactful solutions? These are questions we often ask, and there’s no better way to find answers than by hearing directly from the innovators themselves.  \n I’m excited to introduce the Startup Spotlight Series—a bi-weekly live event hosted on the Microsoft Reactor YouTube channel. This series offers a unique opportunity to:   \n \n Hear exclusive stories from AI startup founders.  \n \n \n See live demonstrations of their technologies.  \n \n \n Learn about the latest AI trends and real-world solutions for customers’ challenges   \n \n 💡 Why Should You Tune In?  \n The Startup Spotlight Series isn’t just another livestream—it’s a unique opportunity designed to provide insights, inspiration, and practical value for a variety of audiences:  \n \n Startups Founders: Learn from the successes (and struggles) of AI startup leaders. Gain actionable insights into building innovative products, scaling businesses, and navigating challenges.  \n \n \n Developers: Dive into the technical details with live product demos and behind-the-scenes discussions. See how their solutions are being built and deployed.  \n \n \n Students: Discover the latest AI trends and practical applications. Discover how startups are leveraging AI to create impactful solutions. Whether you're looking for inspiration or considering a future in AI, this series is packed with insights to help you grow.  \n \n \n AI Enthusiasts: Stay ahead of the curve by learning how startups are revolutionizing industries. From transformative use cases to the stories behind the technologies, you’ll leave every episode inspired.  \n \n Have burning questions about AI? Each session includes a live Q&A, where you can ask founders directly about their journeys, challenges, and advice. This is your chance to engage with the people shaping the future of AI! \n Thursday Jan 30 2025, Startup Spotlight: Activeloop \n Join us for the second episode of the Startup Spotlight Live Series, a space where AI startups share their journeys, showcasing their innovative technologies and demonstrating live product use cases. In this episode, Gabriela de Queiroz sits down with Davit Buniatyan from Activeloop to explore how they’re leveraging Microsoft to grow, scale, and address real-world challenges. \n Thursday Feb 13th 2025, Startup Spotlight: Synthesized \n Join us for the third episode of the Startup Spotlight Live Series, a space where AI startups share their journeys, showcasing their innovative technologies and demonstrating live product use cases. In this episode, Gabriela de Queiroz sits down with Nicolai Baldin from Synthesized to explore how they’re leveraging Microsoft to grow, scale, and address real-world challenges. \n Thursday Feb 27th 2025, Startup Spotlight: Dataloop \n Join us for the fourth episode of the Startup Spotlight Live Series, a space where AI startups share their journeys, showcasing their innovative technologies and demonstrating live product use cases. In this episode, Gabriela de Queiroz sits down with Dataloop to explore how they’re leveraging Microsoft to grow, scale, and address real-world challenges. \n Join Us \n If you’re as excited about the future of AI as I am, I encourage you to tune in to the Startup Spotlight Series. \n Episodes air every other Thursday at 10:00 AM Pacific Time on the Microsoft Reactor YouTube channel.   \n Can’t make it live? Don’t worry—episodes will be recorded and available for you to watch later at your convenience at Microsoft Reactor Youtube  \n Sign up now to receive reminders and updates for upcoming episodes: \n aka.ms/startup-spotlight  \n 🚀' But that's not all... \n Startups can apply (aka.ms/ss-credits) and get tons of benefits: \n \n Up to $150,000 in Azure credits  \n \n \n Free access to leading AI models through Azure, including OpenAI's models, Llama 2 from Meta, and more.  \n \n \n 1:1 meetings with experts who can help solve immediate business challenges, plus provide technical guidance on the latest in AI.  \n \n \n 30+ additional free and discounted tools, tech, and services from Microsoft and our partners including M365, GitHub, LinkedIn Premium and more.  \n \n   \n 👋 See you there!  \n   \n   \n   \n   \n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"4498","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzcwMTA0LTNuQlVIMg?revision=5\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzcwMTA0LTNuQlVIMg?revision=5"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:3624955":{"__typename":"Conversation","id":"conversation:3624955","topic":{"__typename":"BlogTopicMessage","uid":3624955},"lastPostingActivityTime":"2024-10-03T13:12:47.973-07:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4Mmk0MzNBRTM0RkU3RUE5MkQz?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4Mmk0MzNBRTM0RkU3RUE5MkQz?revision=3","title":"JeffreyChilberto_0-1663034183943.png","associationType":"BODY","width":453,"height":501,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4NWlENEU0MUNBNzg5RkNFNEY0?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4NWlENEU0MUNBNzg5RkNFNEY0?revision=3","title":"JeffreyChilberto_1-1663034928154.png","associationType":"BODY","width":225,"height":136,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4OWkzQTFBRUY0MEFEMzEyQkJD?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4OWkzQTFBRUY0MEFEMzEyQkJD?revision=3","title":"JeffreyChilberto_2-1663035127321.png","associationType":"BODY","width":480,"height":347,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5MmlCMTIzMUU5Q0M1NUUzNTE5?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5MmlCMTIzMUU5Q0M1NUUzNTE5?revision=3","title":"JeffreyChilberto_3-1663035264717.png","associationType":"BODY","width":894,"height":81,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NGk0N0MxMDBBREUwNUIwRjg3?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NGk0N0MxMDBBREUwNUIwRjg3?revision=3","title":"JeffreyChilberto_4-1663035399536.png","associationType":"BODY","width":1084,"height":451,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NWkyMjExRjQxMjlDOUJFODA4?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NWkyMjExRjQxMjlDOUJFODA4?revision=3","title":"JeffreyChilberto_5-1663035589740.png","associationType":"BODY","width":885,"height":622,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5N2lDNkExQjZFRkVCQjM2NTE5?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5N2lDNkExQjZFRkVCQjM2NTE5?revision=3","title":"JeffreyChilberto_6-1663035940723.png","associationType":"BODY","width":503,"height":140,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5OGlFQkE3NjI0RkMzQUQ3NDM5?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5OGlFQkE3NjI0RkMzQUQ3NDM5?revision=3","title":"JeffreyChilberto_7-1663036010904.png","associationType":"BODY","width":712,"height":392,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMGkxQTBCREY1OEU0MkQwMUNE?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMGkxQTBCREY1OEU0MkQwMUNE?revision=3","title":"JeffreyChilberto_8-1663036207787.png","associationType":"BODY","width":392,"height":54,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMWkzQkU0MkMwM0Y2NEQyRjg1?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMWkzQkU0MkMwM0Y2NEQyRjg1?revision=3","title":"JeffreyChilberto_9-1663036314861.png","associationType":"BODY","width":876,"height":149,"altText":null},"BlogTopicMessage:message:3624955":{"__typename":"BlogTopicMessage","subject":"How To: Send requests to Azure Storage from Azure API Management","conversation":{"__ref":"Conversation:conversation:3624955"},"id":"message:3624955","revisionNum":3,"uid":3624955,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:141713"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" In this How To, I will show a simple mechanism for writing a payload to Azure Blob Storage from Azure API Management. Some examples where this is useful is implementing a Claim-Check pattern for large messages or to support message logging when Application Insights is not suitable. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":25861},"postTime":"2022-09-12T19:36:43.070-07:00","lastPublishTime":"2022-09-12T19:40:06.420-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Overview \n In this How To, I will show a simple mechanism for writing a payload to Azure Blob Storage from Azure API Management (APIM). Some examples where this approach is useful: \n \n Claim-Check Claim-Check pattern is used to split a large message into a claim check and a payload. The claim check is sent to a downstream system which has a reference to the location of the payload. The downstream system then retrieves the payload for handling. You might want to do this when working with technology that are not optimised suited for very large messages (Service Bus) either by a size limitation or associated cost, or when you do not need to process all messages.  \n Message Logging Application Insights is awesome, and though you can send payloads as part of your telemetry, this can result in a surprisingly high usage charge. As a way to address this, you might want to store the payloads in Azure Storage instead. \n \n There are more scenarios of course, but those are the two top ones that jump out at me. \n   \n Example Use Case \n In this example, I will amend the policy of an API to write the payload received to a storage account blob container. This example will show how to modify the payload as well as how to establish the required permission using service identity and RBAC permissions. This is my preferred way of handling authentication and authorisation when working with Azure Storage. API Keys and SAS tokens are possible but I find them challenging for most teams to manage and code. \n   \n Setup \n This How To starts after an Azure Storage service and a APIM service have been provisioned. Thanks to the APIM team, the service provides a sample API, Echo API, that is suitable for a our purposes. \n \n This example will update the POST operation Create resource.  \n   \n Permissions \n The next step is to enable the APIM to access blob storage. To do this, navigate to the Managed identities blade: \n \n You will want the System assigned on: \n \n Using Azure role assignments, create a assignment for Storage Blob Data Contributor over your storage account.  \n \n The entry above shows access for my APIM, tmp-apim-ase, over the sttempase Azure Storage account. \n   \n Policy \n Now back on the Echo API, select the Create resource operation and click the Policy code editor: \n \n   \n This will provide an xml editor. Insert the following xml in the inboud element. \n   \n   \n <set-variable name=\"BlobFileName\" value=\"@{\n var id = context.Api.Id; \n var operation = context.Operation.Id;\n var requestId = context.RequestId;\n\n return $\"https://[yourstorage].blob.core.windows.net/apimlog/{id}/{operation}/{requestId}.txt\";\n }\" />\n <send-request mode=\"new\" timeout=\"20\" response-variable-name=\"blobdata\" ignore-error=\"true\">\n <set-url>@((string)context.Variables[\"BlobFileName\"])</set-url>\n <set-method>PUT</set-method>\n <set-header name=\"x-ms-version\" exists-action=\"override\">\n <value>2019-07-07</value>\n </set-header>\n <set-header name=\"x-ms-blob-type\" exists-action=\"override\">\n <value>BlockBlob</value>\n </set-header>\n <set-body>@( context.Request.Body.As<string>(preserveContent: true) )</set-body>\n <authentication-managed-identity resource=\"https://storage.azure.com\" />\n </send-request> \n   \n   \n You will need to update the value for [yourstorage] to your Azure Blob Storage account. The result should look something like this: \n \n A couple things to note. I set the file name to use the unique RequestId generated by APIM, and I created a folder structure to reflect the api and operation called. Have a look at the supported Context Variables to suit your purpose.  \n Also note the ignore-error attribute is set to true. In my case, I do not want to fail the message but this might not be suitable if implementing the Claim-Check pattern. Also, when reading the request body, be sure to preserveContent.  \n   \n Test \n Testing the API is nice and simple using the Test tab. \n \n If the Azure gods are with you, you should not see an error and instead see a new file created in your storage account. \n \n Now, what if something goes wrong, or if you are not familiar with the Trace feature, read on. \n   \n Troubleshooting \n The best way to troubleshoot is using Trace. This is located next to the send button. \n \n This provides more detail as to the steps involved. For example, you can investigate the step where the file is created: \n \n Trace is your friend  \n   \n Summary \n This How To illustrated a simple way to publish to Azure Storage. There are other ways I explored including publishing the claim to Event Hub and the payload to the backend, but I thought this approach was simplest and made for a good How To. Let me know if this saves you some time! \n   \n Cheers \n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5166","kudosSumWeight":1,"repliesCount":11,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4Mmk0MzNBRTM0RkU3RUE5MkQz?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4NWlENEU0MUNBNzg5RkNFNEY0?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI4OWkzQTFBRUY0MEFEMzEyQkJD?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5MmlCMTIzMUU5Q0M1NUUzNTE5?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NGk0N0MxMDBBREUwNUIwRjg3?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5NWkyMjExRjQxMjlDOUJFODA4?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5N2lDNkExQjZFRkVCQjM2NTE5?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDI5OGlFQkE3NjI0RkMzQUQ3NDM5?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMGkxQTBCREY1OEU0MkQwMUNE?revision=3\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zNjI0OTU1LTQwNDMwMWkzQkU0MkMwM0Y2NEQyRjg1?revision=3\"}"}}],"totalCount":10,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4234937":{"__typename":"Conversation","id":"conversation:4234937","topic":{"__typename":"BlogTopicMessage","uid":4234937},"lastPostingActivityTime":"2024-09-12T00:00:00.027-07:00","solved":false},"User:user:506258":{"__typename":"User","uid":506258,"login":"sasina","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS01MDYyNTgtMjM1NzE3aTdBNTk2QTgyRDkyN0I0NTQ"},"id":"user:506258"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1MWkxNkZGODg3QzU4QTRCNkU0?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1MWkxNkZGODg3QzU4QTRCNkU0?revision=5","title":"sasina_1-1725321078051.png","associationType":"BODY","width":711,"height":466,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0MWkxOUM0MTM4MzRCN0U0RUNF?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0MWkxOUM0MTM4MzRCN0U0RUNF?revision=5","title":"sasina_1-1725318039624.png","associationType":"BODY","width":892,"height":687,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0M2k1NEI0OUU2NzRDNzdGOEFG?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0M2k1NEI0OUU2NzRDNzdGOEFG?revision=5","title":"sasina_2-1725318039633.png","associationType":"BODY","width":876,"height":631,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1NmlBNjQ0QzIzMTlCM0U1NTFC?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1NmlBNjQ0QzIzMTlCM0U1NTFC?revision=5","title":"sasina_2-1725321919514.png","associationType":"BODY","width":515,"height":692,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1N2k2NjRGMzNGNDMwODIwQTZD?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1N2k2NjRGMzNGNDMwODIwQTZD?revision=5","title":"sasina_3-1725322239660.png","associationType":"BODY","width":817,"height":358,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1OWk0NDc3NEI1NjIzRDdGNDFD?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1OWk0NDc3NEI1NjIzRDdGNDFD?revision=5","title":"sasina_0-1725323432636.png","associationType":"BODY","width":797,"height":708,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI2MGkyNTE3OEE1MDU4RkEyNEU0?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI2MGkyNTE3OEE1MDU4RkEyNEU0?revision=5","title":"sasina_1-1725323706338.png","associationType":"BODY","width":682,"height":268,"altText":null},"BlogTopicMessage:message:4234937":{"__typename":"BlogTopicMessage","subject":"Enhancing Data Security and Digital Trust in the Cloud using Azure Services.","conversation":{"__ref":"Conversation:conversation:4234937"},"id":"message:4234937","revisionNum":5,"uid":4234937,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:506258"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Enhancing Data Security and Digital Trust in the Cloud by Implementing Client-Side Encryption (CSE) using Azure Apps, Azure Storage and Azure Key Vault. Think of Client-Side Encryption (CSE) as a strategy that has proven to be most effective in augmenting data security and modern precursor to traditional approaches. CSE can provide superior protection for your data, particularly if an authentication and authorization account is compromised. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":2687},"postTime":"2024-09-05T00:00:00.029-07:00","lastPublishTime":"2024-09-12T00:00:00.027-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" \n   \n Introduction \n Think of Client-Side Encryption (CSE) as a strategy that has proven to be most effective in augmenting data security and modern precursor to traditional approaches. In addition to providing a stronger security posture, this strategy is also in compliance with major data regulations like GDPR, FERPA and PCI-DSS. In this article, we’ll explore how CSE can provide superior protection for your data, particularly if an authentication and authorization account is compromised. We’ll also address common questions about Microsoft's stance on CSE and explain why CSE might not be as widely discussed as Client-Side Key Encryption (CSKE). By understanding these concepts, you can better meet security and regulatory requirements and ensure that your data remains protected. \n   \n Use Case \n As shown below in the Figure 1: An example of Use Case Architecture. Protecting and managing financial and health sensitive data for clients is subject to stringent regulatory requirements such as GDPR and PCI-DSS and also the followings: \n \n E-commerce: Protecting customer data such as credit card information, personal details, and purchase history is crucial to maintaining trust and complying with regulations like GDPR and PCI-DSS. \n Technology and Software Development: Intellectual property, source code, and proprietary algorithms are valuable assets that need protection from unauthorized access and industrial espionage.   \n Education: Institutions handle a significant amount of sensitive data, including student records, research data, and personal information of faculty and staff. Compliance with regulations like FERPA (Family Educational Rights and Privacy Act) is essential to protect the privacy of student information. \n \n Practical Use Case scenario for CSE \n \n Organizations handling highly sensitive information (e.g., sensitive personal information) can use CSE to ensure that data remains protected at all times, even if the cloud infrastructure is compromised. \n Where and when clients need to comply with regulations that requiring strict control over the encryption keys and data access, CSE allows them to manage keys externally, ensuring no unauthorized access by cloud providers. \n Organizations concerned about data governance, sovereignty and privacy can use CSE to ensure that their data is protected in line with local laws and privacy regulations. \n \n \n Understanding the concept \n As it shown in the Figure 2: The Concept, the processes involved in client-side encryption (CSE) are the followings: \n \n The client device or application utilizes the authentications and authorization components, authenticates with Azure Key Vault to securely retrieve the encryption key. \n The client application uses the retrieved encryption key to encrypt the data, ensuring it is securely transformed into an encrypted format. \n The client uploads the encrypted data to Azure Storage, where it is stored securely in its encrypted form. \n When needed, the client retrieves the encrypted data from Azure Storage. \n The client retrieves the encryption key again from Azure Key Vault. \n It then decrypts the data, making it usable. \n \n   \n \n   \n In a nutshell: \n \n The company uses strong encryption algorithms AES-256 to encrypt data on the client side before uploading it to Azure Blob Storage. \n Encryption keys are stored securely using a hardware security module (HSM), ensuring that keys are never exposed to the cloud service provider. \n Encrypted data is uploaded to Azure, and only authorized client-side applications can decrypt and access the data using the securely managed keys. \n NOTE: This does not jeopardize service-side encryption features for ease of use in protecting your data and if you are using client-side encryption, migrate your applications to version 2 for improved security. \n \n   \n Understanding Client-Side Encryption (CSE) and Client-Side Key Encryption (CSKE). \n Client-Side Encryption (CSE) provides a significant security advantage by allowing organizations to maintain complete control over their data and encryption keys. This method not only enhances data security but also supports compliance with regulatory requirements, offering peace of mind in the ever-evolving landscape of cloud computing. CSE encrypts data before it is sent to any service like Azure and this means that the data is encrypted on the client’s side, and Azure never sees the encryption keys. Even if someone gains access to your Azure account, they cannot read your data without the keys. In contrast, Client-Side Key Encryption (CSKE) focuses on securing the encryption keys themselves. The client manages and controls these keys, ensuring they are not accessible to the cloud service. This adds an extra layer of protection by keeping the keys out of the service provider’s reach. Both approaches enhance security but address different aspects of data protection. \n   \n Why We Need Client-Side Encryption (CSE) \n Enhanced Security \n \n With CSE, data is encrypted before it leaves the client’s environment. This means that even if the cloud service is compromised, the attacker only has access to encrypted data, which is useless without the decryption keys. \n There is no risk of them being exposed through cloud service vulnerabilities. \n \n Regulatory Compliance \n \n Under regulations like GDPR, data breaches involving encrypted data where the keys are not compromised may not require reporting. CSE ensures that the data is encrypted in a way that meets these regulatory requirements. \n For industries with strict data protection requirements (e.g., healthcare, finance), CSE provides a way to handle sensitive data securely and meet compliance standards. \n \n Data Ownership and Control \n \n The client maintains full control over the encryption keys. This autonomy helps organizations enforce their own security policies and procedures. \n Clients can ensure that their data sovereignty requirements are met since they control where and how the encryption keys are stored and managed. \n \n   \n Why Not Client-Side Key Encryption (CSKE) Alone \n Reliance on Cloud Service \n \n Even though CSKE allows clients to manage the encryption keys, the cloud service still handles the encryption and decryption operations. If the cloud service is compromised, there’s a risk that the data could be decrypted by the attacker using the stolen keys. \n CSKE requires trusting that the cloud service’s encryption processes are secure and that there are no vulnerabilities that could be exploited to access the data. \n \n   \n Key Exposure Risks \n \n With CSKE, there’s a shared responsibility between the client and the cloud service for data protection. Any lapses on the cloud service side could lead to key exposure. \n While clients manage the keys, they must still rely on the cloud service to handle the actual encryption and decryption processes securely. \n \n   \n Azure's Position on CSE \n Most of Azure’s documentation and services tend to emphasize Server-Side Encryption (SSE) due to its simplicity and ease of use for most scenarios. SSE allows Azure to provide a straightforward security model that works out-of-the-box for users, without requiring significant changes to their applications or processes. \n However, Azure does support CSE through various SDKs and client libraries. For instance, Azure Storage SDKs for different programming languages provide support for encrypting data on the client side before uploading it to Azure Blob Storage. \n   \n Step-by-Step Solution for Implementing Client-Side Encryption (CSE) for Python, .NET Core Blazor App using C#, and Java Apps. \n   \n Requirements (Refers to Figure 1: An example of Use Case Architecture)  \n Cloud provider (Microsoft Azure) \n \n Choose the Right Azure Storage \n Select the Encryption Mode \n Ensure Right Dependencies \n Azure Key Vault Integration \n Azure Blob Storage (In this context) \n \n   \n Your organization responsibility to implement CSE \n \n Determine the level of security needed for your data. \n Identify any regulations (like GDPR) that mandate specific encryption practices. \n Choose a strong encryption algorithm (AES-256) latest version and a reliable encryption library in your programming language of choice. For example, Python’s cryptography library, Java’s javax.crypto  or C# security.cryptography.algorithms package. \n Azure subscription, storage account, and .NET SDK. \n \n   \n To implement Client-Side Encryption (CSE) in your application using Azure Key Vault and Azure Blob Storage. \n   \n Azure Key Vault \n You will set up Azure Key Vault to store and manage encryption keys securely. \n   \n \n You will need to create a Key Vault as this will help to create RSA, EC, or AES keys in Managed HSM, then use them for encryption-at-rest in Azure Storage, Azure SQL, and more. So, in the Azure portal, create a new Key Vault resource as shown below. \n \n   \n \n  You will Navigate to Administrators by click on it, then Click Add principal, then select your apps as seen on the screen below: \n  Add Administrator for Azure Key Vault Managed HSM \n   \n   \n This will Set the permissions for the Key Vault, ensuring that your application can access the keys. So, review to create and Click on Create button as shown below: \n \n   \n It might take a couple of minutes for your Azure Key Vault creation to deploy successfully. \n   \n \n   \n   \n   \n \n Create or Import Encryption Keys: \n \n Next is to create a new key or import an existing key in the Key Vault. This key will be used for encrypting and decrypting data. But prior to this you must have updated your network settings. So, let’s use Azure CLI: \n \n To Create a New Key using bash in Azure CLI \n \n   \n   \n az keyvault key create --vault-name <YourKeyVaultName> --name <YourKeyName> --protection software \n   \n   \n \n To Import an Existing Key (If you have a key in a PEM or PFX file, you can import it) using bash in Azure CLI. \n \n   \n   \n az keyvault key import --vault-name <YourKeyVaultName> --name <YourKeyName> --pem-file <YourPemFilePath> \n   \n   \n   \n Replace <YourKeyVaultName>, <YourKeyName>, and <YourPemFilePath> with your Key Vault name, the key name, and the path to your key file. \n   \n   \n \n Assign Access Policies to allow your app to perform operations like `wrapKey` and `unwrapKey` with the key using bash in Azure CLI: \n \n   \n   \n az keyvault set-policy --name <YourKeyVaultName> --spn <YourAppServicePrincipalId> --key-permissions get list wrapKey unwrapKey \n   \n   \n Replace <YourKeyVaultName> with your Key Vault name and <YourAppServicePrincipalId> with the service principal ID of your Blazor app. \n   \n Azure Blob Storage \n You will configure Azure Blob Storage to store the encrypted data. You will be using Azure Storage client libraries for Blob Storage or Queue Storage if that’s your choice with the same steps. \n   \n \n In the Azure portal, create a new Blob Storage account (Quickstart blobs)  or using Azure CLI as shown below: \n \n   \n   \n az storage account create --name <YourStorageAccountName> --resource-group <YourResourceGroup> --location <YourLocation> --sku Standard_LRS --kind StorageV2 \n   \n   \n Replace <YourStorageAccountName>, <YourResourceGroup>, and <YourLocation> with your desired storage account name, resource group, and Azure region. \n   \n \n Configure access control for your Blob Storage account, ensuring your app can read and write data using a service principal, for example you can assign a role like Storage Blob Data Contributor: \n \n   \n   \n az role assignment create --assignee <YourAppServicePrincipalId> --role \"Storage Blob Data Contributor\" --scope /subscriptions/<YourSubscriptionId>/resourceGroups/<YourResourceGroup>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName> \n   \n   \n Replace <YourAppServicePrincipalId>, <YourSubscriptionId>, <YourResourceGroup>, and <YourStorageAccountName> with your service principal ID, subscription ID, resource group, and storage account name. \n   \n \n Use SAS tokens or managed identities to secure access to the Blob Storage account. To generate a SAS token for the storage account using Azure CLI: \n \n   \n   \n az storage account generate-sas --account-name <YourStorageAccountName> --permissions rwl --expiry <YYYY-MM-DD> --resource-types sco --services b --https-only \n   \n   \n If your app is using a managed identity, the role assignment from previous step, it will automatically secure the storage account access, and no additional steps are required. \n Replace <YourStorageAccountName> and <YYYY-MM-DD> with your storage account name and desired expiry date. \n   \n Implementing Client-Side Encryption for Python App \n   \n Encryption and Uploading in Python: \n   \n \n Install the required libraries in bash command \n \n    \n   \n   \n pip install cryptography azure-storage-blob \n   \n   \n   \n \n Encryption and Uploading in Python, for example: \n \n    \n   \n   \n \n from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes\n\n from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC\n\n from cryptography.hazmat.backends import default_backend\n\n from cryptography.hazmat.primitives import hashes\n\n from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient\n\n import os\n\n from base64 import urlsafe_b64encode\n\n\n\n # Configuration\n\n account_url = \"https://<your_storage_account>.blob.core.windows.net\"\n\n container_name = \"my-container\"\n\n blob_name = \"my-encrypted-blob\"\n\n key = b'secret_key' # Replace with your secret key\n\n\n\n # Function to encrypt data\n\n def encrypt_data(data, key):\n\n backend = default_backend()\n\n salt = os.urandom(16)\n\n kdf = PBKDF2HMAC(\n\n algorithm=hashes.SHA256(),\n\n length=32,\n\n salt=salt,\n\n iterations=100000,\n\n backend=backend\n\n )\n\n key = kdf.derive(key)\n\n iv = os.urandom(16)\n\n cipher = Cipher(algorithms.AES(key), modes.CFB(iv), backend=backend)\n\n encryptor = cipher.encryptor()\n\n encrypted_data = encryptor.update(data) + encryptor.finalize()\n\n return salt + iv + encrypted_data\n\n\n\n # Sample data to encrypt\n\n data = b\"Sensitive data that needs encryption\"\n\n\n\n # Encrypt the data\n\n encrypted_data = encrypt_data(data, key)\n\n\n\n # Upload encrypted data to Azure Blob Storage\n\n blob_service_client = BlobServiceClient(account_url=account_url)\n\n blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)\n\n blob_client.upload_blob(encrypted_data, overwrite=True)\n\n\n\n print(\"Data encrypted and uploaded successfully.\")\n\n \n\n \n   \n   \n Downloading and Decrypting in Python: \n   \n Decrypt and Download Data: \n    \n   \n   \n \n from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes\n\n from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC\n\n from cryptography.hazmat.backends import default_backend\n\n from cryptography.hazmat.primitives import hashes\n\n from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient\n\n import os\n\n\n\n # Configuration\n\n account_url = \"https://<your_storage_account>.blob.core.windows.net\"\n\n container_name = \"my-container\"\n\n blob_name = \"my-encrypted-blob\"\n\n key = b'secret_key' # Replace with your secret key\n\n\n\n # Function to decrypt data\n\n def decrypt_data(encrypted_data, key):\n\n backend = default_backend()\n\n salt = encrypted_data[:16]\n\n iv = encrypted_data[16:32]\n\n ciphertext = encrypted_data[32:]\n\n kdf = PBKDF2HMAC(\n\n algorithm=hashes.SHA256(),\n\n length=32,\n\n salt=salt,\n\n iterations=100000,\n\n backend=backend\n\n )\n\n key = kdf.derive(key)\n\n cipher = Cipher(algorithms.AES(key), modes.CFB(iv), backend=backend)\n\n decryptor = cipher.decryptor()\n\n decrypted_data = decryptor.update(ciphertext) + decryptor.finalize()\n\n return decrypted_data\n\n # Download encrypted data from Azure Blob Storage\n\n blob_service_client = BlobServiceClient(account_url=account_url)\n\n blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)\n\n encrypted_data = blob_client.download_blob().readall()\n\n\n # Decrypt the data\n\n decrypted_data = decrypt_data(encrypted_data, key)\n\n print(f\"Decrypted data: {decrypted_data.decode('utf-8')}\")\n\n \n   \n   \n   \n Implementing Client-Side Encryption for .NET Core Blazor App using C# \n   \n Encryption and uploading in C#: \n   \n   \n \n Irrespective of IDE you are using, Install the required NuGet packages: \n \n    \n   \n   \n dotnet add package Azure.Storage.Blobs\ndotnet add package System.Security.Cryptography.Algorithms \n   \n   \n   \n \n Encryption and Uploading code example: \n \n   \n   \n   \n using System;\n using System.IO;\n using System.Security.Cryptography;\n using Azure.Storage.Blobs;\n using Azure.Storage.Blobs.Models;\n\n\n // Configuration\n string accountUrl = \"https://<your_storage_account>.blob.core.windows.net\";\n string containerName = \"my-container\";\n string blobName = \"my-encrypted-blob\";\n byte[] key = Convert.FromBase64String(\"your_base64_secret_key\"); // Replace with your Base64 encoded secret key\n\n\n // Function to encrypt data\n byte[] EncryptData(byte[] data, byte[] key)\n {\n using var aes = Aes.Create();\n aes.Key = key;\n aes.GenerateIV();\n using var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);\n using var ms = new MemoryStream();\n ms.Write(aes.IV, 0, aes.IV.Length);\n using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))\n {\n cs.Write(data, 0, data.Length);\n }\n return ms.ToArray();\n\n }\n\n // Sample data to encrypt\n byte[] data = System.Text.Encoding.UTF8.GetBytes(\"Sensitive data that needs encryption\");\n\n\n // Encrypt the data\n byte[] encryptedData = EncryptData(data, key);\n\n // Upload encrypted data to Azure Blob Storage\n BlobServiceClient blobServiceClient = new BlobServiceClient(new Uri(accountUrl));\n BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);\n BlobClient blobClient = containerClient.GetBlobClient(blobName);\n using (var ms = new MemoryStream(encryptedData))\n {\n blobClient.Upload(ms, new BlobHttpHeaders { ContentType = \"application/octet-stream\" }, true);\n\n }\n\n Console.WriteLine(\"Data encrypted and uploaded successfully.\");\n\n\n\n \n   \n   \n Downloading and Decrypting Example in C#: \n   \n Decrypt and Download Data: \n   \n   \n using System;\n using System.IO;\n using System.Security.Cryptography;\n using Azure.Storage.Blobs;\n\n // Configuration\n string accountUrl = \"https://<your_storage_account>.blob.core.windows.net\";\n string containerName = \"my-container\";\n string blobName = \"my-encrypted-blob\";\n byte[] key = Convert.FromBase64String(\"your_base64_secret_key\"); // Replace with your Base64 encoded secret key\n\n\n // Function to decrypt data\n byte[] DecryptData(byte[] encryptedData, byte[] key)\n {\n using var aes = Aes.Create();\n using var ms = new MemoryStream(encryptedData);\n byte[] iv = new byte[aes.BlockSize / 8];\n ms.Read(iv, 0, iv.Length);\n using var decryptor = aes.CreateDecryptor(key, iv);\n using var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);\n using var result = new MemoryStream();\n cs.CopyTo(result);\n return result.ToArray();\n }\n\n\n // Download encrypted data from Azure Blob Storage\n BlobServiceClient blobServiceClient = new BlobServiceClient(new Uri(accountUrl));\n BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);\n BlobClient blobClient = containerClient.GetBlobClient(blobName);\n\n\n using var ms = new MemoryStream();\n blobClient.DownloadTo(ms);\n byte[] encryptedData = ms.ToArray();\n\n // Decrypt the data\n byte[] decryptedData = DecryptData(encryptedData, key);\n Console.WriteLine($\"Decrypted data: {System.Text.Encoding.UTF8.GetString(decryptedData)}\"); \n   \n   \n   \n Replace <your_storage_account> and your_base64_secret_key with your actual storage account URL and Base64 encoded secret key, respectively. \n   \n Implementing Client-Side Encryption for Java application \n   \n Encryption and Uploading in Java: \n   \n \n You will first need to add the required dependencies to your pom.xml: \n \n   \n   \n <dependency>\n <groupId>com.azure</groupId>\n <artifactId>azure-storage-blob</artifactId>\n <version>12.16.0</version>\n </dependency>\n <dependency>\n <groupId>org.bouncycastle</groupId>\n <artifactId>bcprov-jdk15on</artifactId>\n <version>1.70</version>\n </dependency>\n \n   \n   \n    \n   \n \n Encryption and uploading similar code sample: \n \n   \n   \n import com.azure.storage.blob.BlobClient;\n import com.azure.storage.blob.BlobContainerClient;\n import com.azure.storage.blob.BlobServiceClient;\n import com.azure.storage.blob.BlobServiceClientBuilder;\n import org.bouncycastle.jce.provider.BouncyCastleProvider;\n import javax.crypto.Cipher;\n import javax.crypto.KeyGenerator;\n import javax.crypto.SecretKey;\n import javax.crypto.spec.IvParameterSpec;\n import java.nio.file.Files;\n import java.nio.file.Path;\n import java.nio.file.Paths;\n import java.security.Security;\n import java.util.Base64;\n\n public class EncryptAndUpload {\n static {\n Security.addProvider(new BouncyCastleProvider());\n }\n\n private static final String ACCOUNT_URL = \"https://<your_storage_account>.blob.core.windows.net\";\n private static final String CONTAINER_NAME = \"my-container\";\n private static final String BLOB_NAME = \"my-encrypted-blob\";\n private static final String SECRET_KEY = \"your_base64_secret_key\"; // Replace with your Base64 encoded secret key\n\n public static void main(String[] args) throws Exception {\n \n // Sample data to encrypt\n byte[] data = \"Sensitive data that needs encryption\".getBytes();\n\n // Encrypt the data\n byte[] encryptedData = encryptData(data);\n\n // Upload encrypted data to Azure Blob Storage\n BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint(ACCOUNT_URL).buildClient();\n BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(CONTAINER_NAME);\n BlobClient blobClient = containerClient.getBlobClient(BLOB_NAME);\n\n Path tempFile = Files.createTempFile(\"encrypted\", \".dat\");\n Files.write(tempFile, encryptedData);\n blobClient.uploadFromFile(tempFile.toString(), true);\n System.out.println(\"Data encrypted and uploaded successfully.\");\n }\n\n private static byte[] encryptData(byte[] data) throws Exception {\n SecretKey key = getKeyFromBase64(SECRET_KEY);\n Cipher cipher = Cipher.getInstance(\"AES/CBC/PKCS5Padding\", \"BC\");\n byte[] iv = new byte[cipher.getBlockSize()];\n new java.security.SecureRandom().nextBytes(iv);\n cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));\n byte[] encryptedData = cipher.doFinal(data);\n byte[] ivAndEncryptedData = new byte[iv.length + encryptedData.length];\n System.arraycopy(iv, 0, ivAndEncryptedData, 0, iv.length);\n System.arraycopy(encryptedData, 0, ivAndEncryptedData, iv.length, encryptedData.length);\n return ivAndEncryptedData;\n }\n\n private static SecretKey getKeyFromBase64(String base64Key) {\n byte[] decodedKey = Base64.getDecoder().decode(base64Key);\n return new javax.crypto.spec.SecretKeySpec(decodedKey, 0, decodedKey.length, \"AES\");\n }\n } \n   \n   \n    \n Downloading and Decrypting in Java \n   \n Decrypt and Download Data: \n    \n   \n   \n import com.azure.storage.blob.BlobClient;\n import com.azure.storage.blob.BlobContainerClient;\n import com.azure.storage.blob.BlobServiceClient;\n import com.azure.storage.blob.BlobServiceClientBuilder;\n import org.bouncycastle.jce.provider.BouncyCastleProvider;\n import javax.crypto.Cipher;\n import javax.crypto.SecretKey;\n import javax.crypto.spec.IvParameterSpec;\n import java.nio.file.Files;\n import java.nio.file.Path;\n import java.nio.file.Paths;\n import java.security.Security;\n import java.util.Base64;\n\n public class DownloadAndDecrypt {\n static {\n Security.addProvider(new BouncyCastleProvider());\n }\n\n private static final String ACCOUNT_URL = \"https://<your_storage_account>.blob.core.windows.net\";\n private static final String CONTAINER_NAME = \"my-container\";\n private static final String BLOB_NAME = \"my-encrypted-blob\";\n private static final String SECRET_KEY = \"your_base64_secret_key\"; // Replace with your Base64 encoded secret key\n\n public static void main(String[] args) throws Exception {\n \n // Download encrypted data from Azure Blob Storage\n BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint(ACCOUNT_URL).buildClient();\n BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(CONTAINER_NAME);\n BlobClient blobClient = containerClient.getBlobClient(BLOB_NAME);\n\n\n Path tempFile = Files.createTempFile(\"encrypted\", \".dat\");\n blobClient.downloadToFile(tempFile.toString());\n byte[] encryptedData = Files.readAllBytes(tempFile);\n\n\n // Decrypt the data\n byte[] decryptedData = decryptData(encryptedData);\n\n System.out.println(\"Decrypted data: \" + new String(decryptedData));\n }\n\n\n private static byte[] decryptData(byte[] encryptedData) throws Exception {\n SecretKey key = getKeyFromBase64(SECRET_KEY);\n Cipher cipher = Cipher.getInstance(\"AES/CBC/PKCS5Padding\", \"BC\");\n byte[] iv = new byte[cipher.getBlockSize()];\n System.arraycopy(encryptedData, 0, iv, 0, iv.length);\n byte[] encryptedContent = new byte[encryptedData.length - iv.length];\n System.arraycopy(encryptedData, iv.length, encryptedContent, 0, encryptedContent.length);\n cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));\n return cipher.doFinal(encryptedContent);\n }\n\n private static SecretKey getKeyFromBase64(String base64Key) {\n byte[] decodedKey = Base64.getDecoder().decode(base64Key);\n return new javax.crypto.spec.SecretKeySpec(decodedKey, 0, decodedKey.length, \"AES\");\n }\n } \n   \n   \n   \n Likewise, you will replace <your_storage_account> and your_base64_secret_key with your actual storage account URL and Base64 encoded secret key, respectively and ensure you are using the latest Azure SDK. \n   \n Managing Encryption Keys \n \n Store encryption keys securely, preferably in a hardware security module (HSM) or a key management service (KMS) and make sure you regularly rotate encryption keys to enhance security. \n \n   \n Verifying and Testing \n \n Ensure that encryption and decryption processes are secure and cannot be bypassed. \n Verify that your implementation meets all regulatory requirements. \n \n   \n Outcome \n \n Even if the cloud storage is compromised, the encrypted data remains secure as the keys are not accessible to the attacker. \n The company meets regulatory requirements by ensuring data is encrypted in a way that aligns with GDPR, PCI-DSS, and FERPA digital trust standards. \n Full control over encryption keys and data access policies enhances the company’s ability to protect its clients' sensitive financial information. \n \n   \n Conclusion \n We have seen so far, how Client-Side Encryption (CSE) provides an enhanced level of security by ensuring that data is encrypted before it leaves the client’s environment, and how we can implement this with three different programing languages for Azure App using Azure Key Vault, Azure Blob and create Azure Storage Account. This method aligns well with regulatory requirements such as GDPR, PCI-DSS, and FERPA, offering greater control over sensitive information and protecting it from breaches and unauthorized access. By implementing CSE, can better meet security and regulatory requirements, ensuring the highest level of data protection. It helps provides enhanced protection against data breaches. While it involves more complexity than Client-Side Key Encryption (CSKE), it offers significant security benefits that are crucial for handling sensitive data. CSE enhances security by allowing you to manage encryption keys independently. It's a valuable practice for safeguarding sensitive information in cloud solutions! \n   \n   \n CAUTION: \n \n The code might need to upgrade depend on the time you are performing these tasks. \n If you are using Azure file share as a Persistent Volume Claim (PVC) in Azure Kubernetes Service (AKS) with POD workload identity to retrieve secret you will use the Secrets Store CSI Driver to natively retrieve secret contents from Azure Key Vault. This driver securely provides secrets to the requesting pods: https://learn.microsoft.com/en-us/azure/aks/developer-best-practices-pod-security \n \n   \n References \n For more information on Azure's support for Client-Side Encryption and to access further resources on Azure's official documentation and security best practices. \n \n Why We Need Client-Side Encryption, not Client-Side Key Encryption. https://learn.microsoft.com/en-us/answers/questions/1723580/why-we-need-client-side-encryption-not-client-side. \n Client-side encryption - Wikipedia. https://en.wikipedia.org/wiki/Client-side_encryption. \n Client-side encryption FAQ - Google Workspace Admin Help: https://support.google.com/a/answer/14328489?hl=en-Link \n What Is Client Side Encryption - LogMeOnce Resources. https://logmeonce.com/resources/what-is-client-side-encryption/ \n Client-side encryption for blobs - Azure Storage. https://learn.microsoft.com/en-us/azure/storage/blobs/client-side-encryption. \n How Microsoft 365 encryption helps safeguard data and maintain. https://techcommunity.microsoft.com/t5/microsoft-365-blog/how-microsoft-365-encryption-helps-safeguard-data-and-maintain/ba-p/2461066. \n Azure encryption overview. https://learn.microsoft.com/en-us/azure/security/fundamentals/encryption-overview. \n Data encryption models in Microsoft Azure. https://learn.microsoft.com/en-us/azure/security/fundamentals/encryption-models. \n Client-side encryption for blobs - Azure Storage | Microsoft Learn https://learn.microsoft.com/en-us/azure/storage/blobs/client-side-encryption?tabs=dotnet \n CSI Driver to natively retrieve secret contents from Azure Key Vault. https://learn.microsoft.com/en-us/azure/aks/developer-best-practices-pod-security \n \n   \n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"31855","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1MWkxNkZGODg3QzU4QTRCNkU0?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0MWkxOUM0MTM4MzRCN0U0RUNF?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI0M2k1NEI0OUU2NzRDNzdGOEFG?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1NmlBNjQ0QzIzMTlCM0U1NTFC?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1N2k2NjRGMzNGNDMwODIwQTZD?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI1OWk0NDc3NEI1NjIzRDdGNDFD?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjM0OTM3LTYxNjI2MGkyNTE3OEE1MDU4RkEyNEU0?revision=5\"}"}}],"totalCount":7,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4176726":{"__typename":"Conversation","id":"conversation:4176726","topic":{"__typename":"BlogTopicMessage","uid":4176726},"lastPostingActivityTime":"2024-07-03T00:00:00.051-07:00","solved":false},"User:user:186188":{"__typename":"User","uid":186188,"login":"Andreas_Helland","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xODYxODgtODUxMDlpRDg3N0ZCMkZEMDI5RDFBMA"},"id":"user:186188"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxM2kxMkNERjIyQ0JCN0FEQTc3?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxM2kxMkNERjIyQ0JCN0FEQTc3?revision=1","title":"531abf15-e762-4bfa-abdb-8cf8458659b6.png","associationType":"BODY","width":1280,"height":640,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNGk0QkI5OUMxODQ3MzI3OERB?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNGk0QkI5OUMxODQ3MzI3OERB?revision=1","title":"Aspire_01.png","associationType":"BODY","width":855,"height":258,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNWk4OTg3NkE2RDk0RjAzODlC?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNWk4OTg3NkE2RDk0RjAzODlC?revision=1","title":"Aspire_02.png","associationType":"BODY","width":782,"height":315,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNmk3MUZCNDI4Mjc0M0ZCMTRC?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNmk3MUZCNDI4Mjc0M0ZCMTRC?revision=1","title":"Aspire_03.png","associationType":"BODY","width":772,"height":382,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxN2k0QkZGMTQ1MzlEQUYxNTNE?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxN2k0QkZGMTQ1MzlEQUYxNTNE?revision=1","title":"Azd_01.png","associationType":"BODY","width":847,"height":367,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxOGlBRjQxMENFQjVDMDJENjVE?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxOGlBRjQxMENFQjVDMDJENjVE?revision=1","title":"Azd_02.png","associationType":"BODY","width":785,"height":120,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMGlENDQ2MkIzQ0FDQUJBQTg4?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMGlENDQ2MkIzQ0FDQUJBQTg4?revision=1","title":"BFF_Infra_Old.png","associationType":"BODY","width":340,"height":412,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMWkwNTQ2RkU3QUYxN0ZCOUVD?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMWkwNTQ2RkU3QUYxN0ZCOUVD?revision=1","title":"BFF_Infra_New.png","associationType":"BODY","width":327,"height":116,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMmlBOTE3NDMwQzNBRDlDNDZF?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMmlBOTE3NDMwQzNBRDlDNDZF?revision=1","title":"Ingress_01.png","associationType":"BODY","width":917,"height":272,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyNWlEMDA3MzM2NDM0QjgxMTU2?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyNWlEMDA3MzM2NDM0QjgxMTU2?revision=1","title":"Azd_03.png","associationType":"BODY","width":247,"height":461,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyOWk3MzY2MEQ5MkI0NjBCREVG?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyOWk3MzY2MEQ5MkI0NjBCREVG?revision=1","title":"Dashboard_01.png","associationType":"BODY","width":907,"height":457,"altText":null},"BlogTopicMessage:message:4176726":{"__typename":"BlogTopicMessage","subject":"Elevating BFF Apps with .NET Aspire","conversation":{"__ref":"Conversation:conversation:4176726"},"id":"message:4176726","revisionNum":1,"uid":4176726,"depth":0,"board":{"__ref":"Blog:board:AzureDevCommunityBlog"},"author":{"__ref":"User:user:186188"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" We convert a previously implemented BFF solution for Container Apps to be orchestrated locally with .NET Aspire as well as looking at where the Azure Developer CLI fits into the picture. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":14001},"postTime":"2024-07-03T00:00:00.051-07:00","lastPublishTime":"2024-07-03T00:00:00.051-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Back in April I wrote a post on how to implement the Backend for Frontend (BFF) pattern with Azure Container Apps. At the time I said I would avoid bringing in .NET Aspire as it was in preview and earlier explorations pointed to it being somewhat buggy in those preliminary stages. \n   \n About a month ago at Build .NET Aspire went GA so that raises the question anew - should I use Aspire? Let's revisit our sample app and take a closer look. \n   \n \n Revisit that post to read about the BFF concept and implementation details: https://techcommunity.microsoft.com/t5/microsoft-developer-community/implementing-a-blazor-based-bff-in-azure-container-apps/ba-p/4111208 \n   \n All the code can be found here: https://github.com/ahelland/Container-Apps-BFF/tree/main/src/BFF_Aspire \n   \n Adding Aspire to an existing project is quite easy - right-click and choose to add \".NET Aspire Orchestrator Support\". \n \n   \n Hitting F5 brings up the app and dashboard. But wait, the WeatherAPI doesn't work. \n \n   \n We originally made the choice to have the API as a separate solution and that boundary still applies. Aspire isn't able to step out of the boundary of the web app solution by itself. You can sort of wire in other csproj files manually, but I guess it's a design decision if you want to do this. Personally I feel this can lead to scenarios where a solution isn't as independent and complete as it should be. Do note that in this specific case there's an additional minor snag because Aspire currently does not support APIs/apps where you checked \"Place solution and project in the same directory\" during scaffolding. In this sample it is not critical to maintain the API totally separate from the rest of the solution so I went with the easy fix to bring it all into one solution. \n   \n But what if you want/need these two to be separate entities? Aspire can bring in containers instead of the csproj files so if that is a logical boundary you can work with I would say that is a feasible path. \n   \n Ok, we're still able to run our app - that's nice and dandy. \n \n   \n Any other value adds? Well, yes actually there is. \n Service Discovery \n   \n In the first iteration of our code we used a somewhat janky approach switching between the local API address of the weather API and the one running in the cluster: \n var apiBaseAddress = \"http://localhost:5041\";\n\n//For ACA\nif (Environment.GetEnvironmentVariable(\"ASPNETCORE_ENVIRONMENT\") == \"Production\")\n{\n apiBaseAddress = \"http://weatherapi\";\n}\n\nbuilder.Services.AddHttpClient<IWeatherForecaster, ServerWeatherForecaster>(httpClient =>\n{\n httpClient.BaseAddress = new(apiBaseAddress);\n}); \n   \n On a larger scale It's not practical to do if checks like this, and of course if the port number changes for some reason it will break. It works when running in Container Apps because a service discovery mechanism is running in the cluster. Our previous approach was basically to not use service discovery in debug mode and now .NET Aspire is able to fill this role for us. \n   \n How about us changing the code to: \n builder.Services.AddHttpClient<IWeatherForecaster, ServerWeatherForecaster>(httpClient =>\n{\n httpClient.BaseAddress = new(\"https://weatherapi\");\n}); \n   \n There's a few extra lines to make this work - in the Program.cs for the BFF_Web_App.AppHost project you have these two lines: \n builder.AddProject<Projects.WeatherAPI>(\"weatherapi\");\nbuilder.AddProject<Projects.BFF_Web_App>(\"bff-web-app\"); \n   \n Tweak this to the following: \n var weatherapi = builder.AddProject<Projects.WeatherAPI>(\"weatherapi\");\nbuilder.AddProject<Projects.BFF_Web_App>(\"bff-web-app\")\n .WithReference(weatherapi); \n   \n Adding references means Aspire takes care of injecting the correct name resolution for us. Note that we only added a reference to the Web App project as the API project does not rely on making outbound calls. For a larger project you shold figure out which project needs what based on mapping out the communication paths. \n   \n Application settings \n Another \"trick\" we pulled that isn't really recommended is how we handled appsettings - basically hardcoding inline: \n builder.Services.AddAuthentication()\n .AddJwtBearer(\"Bearer\", jwtOptions =>\n {\n // The API does not require an app registration of its own, but it does require a registration for the calling app.\n // These attributes can be found in the Entra ID portal when registering the client.\n jwtOptions.Authority = \"https://sts.windows.net/{TENANT ID}/\";\n jwtOptions.Audience = \"api://{CLIENT ID}\";\n }); \n We could have put this into the appsettings.json file instead of course, but laziness 🙂 Thing is, the Aspire AppHost project brings its own appsettings. So we can do the following (in the AppHost's appsettings.json): \n {\n \"Logging\": {\n \"LogLevel\": {\n \"Default\": \"Information\",\n \"Microsoft.AspNetCore\": \"Warning\",\n \"Aspire.Hosting.Dcp\": \"Warning\"\n }\n },\n \"Parameters\": {\n \"TenantId\": \"guid\",\n \"ClientId\": \"guid\",\n \"ClientSecret\": \"secret\"\n }\n} \n In the Program.cs for the AppHost you need to bring them in as variables: \n   \n var tenantId = builder.AddParameter(\"TenantId\");\nvar clientId = builder.AddParameter(\"ClientId\");\nvar clientSecret = builder.AddParameter(\"ClientSecret\", secret:true); \n   \n And afterwards we can invoke them like this (exemplified by the Weather API's Program.cs, but same goes in the Web App): \n var tenantId = builder.Configuration.GetValue<string>(\"TenantId\");\nvar clientId = builder.Configuration.GetValue<string>(\"ClientId\");\n\nbuilder.Services.AddAuthentication()\n .AddJwtBearer(\"Bearer\", jwtOptions =>\n {\n jwtOptions.Authority = $\"https://sts.windows.net/{tenantId}/\";\n jwtOptions.Audience = $\"api://{clientId}\";\n }); \n   \n Is there a point to doing this instead of the classic appsettings per csproj? In this solution we use the same clientId in two projects - clearly it's easier maintaining this in one place. For settings that only apply to one project it might not make as much sense apart from the value of centralizing settings. While I didn't do it here you can also wire up the AppHost to look up secrets in a Key Vault solving another dev challenge. \n   \n There's only so much you can do in a small sample like this, but Aspire allows you to bring up containers, databases and more using the same pattern. (Meaning you can easily bring in frontends written in other languages for instance.) Visit the (updated) eShop sample for more on that. \n https://github.com/dotnet/eShop \n   \n Should you run out and implement this immediately? Well, if you have a working setup you feel happy with this isn't going to magically improve anything, but if you are in the early phases of setting up a new project I would certainly attempt to bring in Aspire if manual wiring is the alternative. Otherwise plan to add in a maintenance sprint or bring in it when upgrading to .NET 9 in a few months or something. \n   \n What about deployments to the cloud? I kinda saw that one coming 🙂 \n   \n Aspire plus Azure equals ? \n In early demos we saw how Aspire-based solutions were being deployed to Azure at the click of a few buttons. This lead many to think that it's this great developer focused deployment vehicle. Actually…no. \n   \n Aspire in itself is focused on enhancing the developer experience locally on your developer computer. You don't have to deploy to Azure, on-prem or in any way alter your current CI/CD processes. You don't deploy Aspire itself either. It does however enable other tools like the Azure Developer CLI to process the Aspire manifest and turn it into Bicep code for creating Azure resources. \n   \n There's also a community effort called Aspir8 that takes care of generating Kubernetes deployment packaging. It is apparently in the process of being brought into the MS-hosted Aspire repo so we'll see how that integrates, but still think of Aspire as something that runs on your machine only. \n   \n OK - so technically Aspire isn't responsible for pushing my code to Azure, but I can still have developers releasing their code this way? Well… \n   \n If you have the Azure Developer CLI (azd) generate the IaC for you the code should still be deployed to Azure DevOps or GitHub and have pipelines/actions run there as a general practice. (Azure sandbox subscriptions are an exception, but I'm not diving into those concepts for now.) Azd will even generate these for you. \n   \n The Azure Developer CLI is able to understand things like you needing a container environment, container registry, etc. But for obvious reasons it is not able to infer that you want to force all outbound traffic through an Azure Firewall and stand up an Azure Application Gateway to handle the inbound traffic. And even with the knowledge it takes quite a bit more Bicep code to stand up all of that in addition to the added cost. \n   \n Azure Developer CLI \n Creating the necessary bits for playing with code isn't complicated. (Installing azd: https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux&pivots=os-windows) \n Run azd init: \n \n   \n Run azd infra synth: \n \n   \n Pausing for a moment here. This is the folder and file structure from my previous blog post: \n \n   \n This is what azd generated: \n \n   \n Which sort of leads to the question of whether this is me over-engineering things or the azd team under-engineering? As so often the answer is possible a place in-between. If what you want to do is to run a quick test and debug session to verify your code works what azd generates is perfectly fine. If what you want is a solution that is more production-like I believe my Bicep is better suited. (I have simplified my implementation to be suited for a blog post so I must stress that it is not production grade on my part either, but it has a structure you can work from.) \n   \n Currently you are driven towards deploying the services as container apps. As I also based myself on that it's comparable in this context, but maybe you want something else. The Kubernetes tooling I mentioned can bring the containers to a different runtime environment, but if what you are looking for is non-containerized Azure Functions, Azure App Services, or something else you're not really supported by azd for now. To be fair when Project Tye was previewed a few years ago it was about solving the pain of microservices development, not monoliths. (Project Tye being an experiment that was discontinued, but is/was the inspiration for .NET Aspire.) \n   \n And that's sort of the general state of azd at the moment - dev friendly and quick to get going. Thumbs up. Governance, scalable structure, etc. Not so much. \n   \n A quick azd up will deploy and confirm that it works. Both the web app and the api are deployed with internal ingress only though, so you will need to flip to external ingress on the web app to be able to browse to it: \n \n   \n There is one thing I'd like to point out with the azd approach that I like. In my approach with levels the container apps are called \"Level-4\" and there's a copy & paste job adding to the list for each app in your solution. This can be done as a templated loop in a CI/CD pipeline, but it's still a slight disconnect between the lower level infra and the developer stuff. With the azd & Aspire combo you will notice that in addition to the root infra folder there is also an infra folder underneath the Aspire AppHost project: \n \n   \n This contains yaml files that are specific to the individual apps and are easy to tweak. For instance the ingress setting can easily be set to external here instead of using the Azure Portal. You can even reference Bicep files in the Aspire orchestration code: https://learn.microsoft.com/en-us/dotnet/aspire/deployment/azure/custom-bicep-templates?tabs=dotnet-cli \n   \n I think that might be a topic to dive deeper into at a later point, but as you can see there are new options for integrating app code and infra code tighter. \n   \n Look at the rest of the code here: \n https://github.com/ahelland/Container-Apps-BFF/tree/main/src/BFF_Aspire  \n   \n Aspire Dashboard \n I stated a few paragraphs ago that Aspire itself only pertains to your local environment and is not deployed to Azure even if it plays nice with azd. That wasn't a lie, but while the orchestration only applies locally there is actually a component from the observability puzzle you can deploy. The Aspire Dashboard: \n \n   \n Azure Monitor and Application Insights have their use and this doesn't remove the need for those tools, but I think this is a nice addition for giving the rather direct access to traces and console logs. (Console logs are available directly in the Azure Portal for Container Environments as well, but it's slightly more clunky.) Sure, there are other tools in the observability stack, but this one didn't cost me any additional calories to get going with and it brings parity between the things on my local computer and what I can do after deployment. \n   \n All in all I believe .NET Aspire is in a much better state than at the start of the year and you should do a proof of concept or two to see if it fits into your developer workflow. \n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"13633","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxM2kxMkNERjIyQ0JCN0FEQTc3?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNGk0QkI5OUMxODQ3MzI3OERB?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNWk4OTg3NkE2RDk0RjAzODlC?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxNmk3MUZCNDI4Mjc0M0ZCMTRC?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxN2k0QkZGMTQ1MzlEQUYxNTNE?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAxOGlBRjQxMENFQjVDMDJENjVE?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMGlENDQ2MkIzQ0FDQUJBQTg4?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMWkwNTQ2RkU3QUYxN0ZCOUVD?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyMmlBOTE3NDMwQzNBRDlDNDZF?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyNWlEMDA3MzM2NDM0QjgxMTU2?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTc2NzI2LTU5NTAyOWk3MzY2MEQ5MkI0NjBCREVG?revision=1\"}"}}],"totalCount":11,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"CachedAsset:text:en_US-components/community/Navbar-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745505309992","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","gxcuf89792":"Tech Community","external-1":"Events","s-m-b":"Nonprofit Community","windows-server":"Windows Server","education-sector":"Education Sector","driving-adoption":"Driving Adoption","Common-content_management-link":"Content Management","microsoft-learn":"Microsoft Learn","s-q-l-server":"Content Management","partner-community":"Microsoft Partner Community","microsoft365":"Microsoft 365","external-9":".NET","external-8":"Teams","external-7":"Github","products-services":"Products","external-6":"Power Platform","communities-1":"Topics","external-5":"Microsoft Security","planner":"Outlook","external-4":"Microsoft 365","external-3":"Dynamics 365","azure":"Azure","healthcare-and-life-sciences":"Healthcare and Life Sciences","external-2":"Azure","microsoft-mechanics":"Microsoft Mechanics","microsoft-learn-1":"Community","external-10":"Learning Room Directory","microsoft-learn-blog":"Blog","windows":"Windows","i-t-ops-talk":"ITOps Talk","external-link-1":"View All","microsoft-securityand-compliance":"Microsoft Security","public-sector":"Public Sector","community-info-center":"Lounge","external-link-2":"View All","microsoft-teams":"Microsoft Teams","external":"Blogs","microsoft-endpoint-manager":"Microsoft Intune","startupsat-microsoft":"Startups at Microsoft","exchange":"Exchange","a-i":"AI and Machine Learning","io-t":"Internet of Things (IoT)","Common-microsoft365-copilot-link":"Microsoft 365 Copilot","outlook":"Microsoft 365 Copilot","external-link":"Community Hubs","communities":"Products"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745505309992","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745505309992","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745505309992","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745505309992","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745505309992","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagSubscriptionAction-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagSubscriptionAction-1745505309992","value":{"success.follow.title":"Following Tag","success.unfollow.title":"Unfollowed Tag","success.follow.message.followAcrossCommunity":"You will be notified when this tag is used anywhere across the community","success.unfollowtag.message":"You will no longer be notified when this tag is used anywhere in this place","success.unfollowtagAcrossCommunity.message":"You will no longer be notified when this tag is used anywhere across the community","unexpected.error.title":"Error - Action Failed","unexpected.error.message":"An unidentified problem occurred during the action you took. Please try again later.","buttonTitle":"{isSubscribed, select, true {Unfollow} false {Follow} other{}}","unfollow":"Unfollow"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListTabs-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListTabs-1745505309992","value":{"mostKudoed":"{value, select, IDEA {Most Votes} other {Most Likes}}","mostReplies":"Most Replies","mostViewed":"Most Viewed","newest":"{value, select, IDEA {Newest Ideas} OCCASION {Newest Events} other {Newest Topics}}","newestOccasions":"Newest Events","mostRecent":"Most Recent","noReplies":"No Replies Yet","noSolutions":"No Solutions Yet","solutions":"Solutions","mostRecentUserContent":"Most Recent","trending":"Trending","draft":"Drafts","spam":"Spam","abuse":"Abuse","moderation":"Moderation","tags":"Tags","PAST":"Past","UPCOMING":"Upcoming","sortBymostRecent":"Sort By Most Recent","sortBymostRecentUserContent":"Sort By Most Recent","sortBymostKudoed":"Sort By Most Likes","sortBymostReplies":"Sort By Most Replies","sortBymostViewed":"Sort By Most Viewed","sortBynewest":"Sort By Newest Topics","sortBynewestOccasions":"Sort By Newest Events","otherTabs":" Messages list in the {tab} for {conversationStyle}","guides":"Guides","archives":"Archives"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745505309992","value":{"title":"Query Handler"},"localOverride":false},"Category:category:top":{"__typename":"Category","id":"category:top","nodeType":"category"},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745505309992","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/OverflowNav-1745505309992","value":{"toggleText":"More"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1745505309992","value":{"bylineAuthor":"{bylineAuthor}","bylineBoard":"{bylineBoard}","anonymous":"Anonymous","place":"Place {bylineBoard}","gotoParent":"Go to parent {name}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745505309992","value":{"loadMore":"Show More"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745505309992","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745505309992","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745505309992","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1745505309992","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1745505309992","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageUnreadCount-1745505309992","value":{"unread":"{count} unread","comments":"{count, plural, one { unread comment} other{ unread comments}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageViewCount-1745505309992","value":{"textTitle":"{count, plural,one {View} other{Views}}","views":"{count, plural, one{View} other{Views}}"},"localOverride":false},"CachedAsset:text:en_US-components/kudos/KudosCount-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/kudos/KudosCount-1745505309992","value":{"textTitle":"{count, plural,one {{messageType, select, IDEA{Vote} other{Like}}} other{{messageType, select, IDEA{Votes} other{Likes}}}}","likes":"{count, plural, one{like} other{likes}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRepliesCount-1745505309992","value":{"textTitle":"{count, plural,one {{conversationStyle, select, IDEA{Comment} OCCASION{Comment} other{Reply}}} other{{conversationStyle, select, IDEA{Comments} OCCASION{Comments} other{Replies}}}}","comments":"{count, plural, one{Comment} other{Comments}}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505309992":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745505309992","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false}}}},"page":"/tags/TagPage/TagPage","query":{"tagName":"software architecture"},"buildId":"HEhyUrv5OXNBIbfCLaOrw","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.1.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/customComponent/CustomComponent/CustomComponent.tsx","./components/tags/TagsHeaderWidget/TagsHeaderWidget.tsx","./components/messages/MessageListForNodeByRecentActivityWidget/MessageListForNodeByRecentActivityWidget.tsx","./components/tags/TagSubscriptionAction/TagSubscriptionAction.tsx","./components/external/components/ExternalComponent.tsx","../shared/client/components/common/List/ListGroup/ListGroup.tsx","./components/messages/MessageView/MessageView.tsx","./components/messages/MessageView/MessageViewInline/MessageViewInline.tsx","../shared/client/components/common/Pager/PagerLoadMore/PagerLoadMore.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=TagPage","strategy":"afterInteractive"}]}