"}},"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\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/customComponent/CustomComponent\"]})":[{"__ref":"CachedAsset:text:en_US-components/customComponent/CustomComponent-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageListTabs\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageListTabs-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Pager/PagerLoadMore\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/OverflowNav\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageUnreadCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageViewCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageViewCount-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/kudos/KudosCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/kudos/KudosCount-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRepliesCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1750285382165"}],"cachedText({\"lastModified\":\"1750285382165\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1750285382165"}]},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"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":null,"possibleValues":["en-US","es-ES"]},"repliesSortOrder":{"__typename":"InheritableStringSettingWithPossibleValues","key":"config.user_replies_sort_order","value":"DEFAULT","localValue":"DEFAULT","possibleValues":["DEFAULT","LIKES","PUBLISH_TIME","REVERSE_PUBLISH_TIME"]}},"deleted":false},"CachedAsset:pages-1750069395122":{"__typename":"CachedAsset","id":"pages-1750069395122","value":[{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"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":1750069395122,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"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":1750069395122,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"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":1750069395122,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"HealthCheckPage","type":"COMMUNITY","urlPath":"/health","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1750069395122,"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}","userBanned":"We're sorry, but you have been banned from using this site.","userBannedReason":"You have been banned for the following reason: {reason}"},"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},"CachedAsset:theme:customTheme1-1750069394537":{"__typename":"CachedAsset","id":"theme:customTheme1-1750069394537","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","defaultMessageFontFamily":"var(--lia-bs-font-family-base)","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-shared/client/components/common/Loading/LoadingDot-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1750285382165","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1750285382165","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-pages/tags/TagPage-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-pages/tags/TagPage-1750285382165","value":{"tagPageTitle":"Tag:\"{tagName}\" | {communityTitle}","tagPageForNodeTitle":"Tag:\"{tagName}\" in \"{title}\" | {communityTitle}","name":"Tags Page","tag":"Tag: {tagName}"},"localOverride":false},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","entityType":"CATEGORY","displayId":"Azure","nodeType":"category","depth":3,"title":"Azure","shortTitle":"Azure","parent":{"__ref":"Category:category:products-services"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","displayId":"communities","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Communities"},"Category:category:products-services":{"__typename":"Category","id":"category:products-services","displayId":"products-services","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:communities"},"title":"Products"},"Blog:board:AppsonAzureBlog":{"__typename":"Blog","id":"board:AppsonAzureBlog","entityType":"BLOG","displayId":"AppsonAzureBlog","nodeType":"board","depth":4,"conversationStyle":"BLOG","title":"Apps on Azure Blog","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:Azure"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:communities"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:products-services"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Azure"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"theme":{"__ref":"Theme:customTheme1"},"shortTitle":"Apps on Azure Blog","tagPolicies":{"__typename":"TagPolicies","canSubscribeTagOnNode":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","args":[]}},"canManageTagDashboard":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","args":[]}}}},"CachedAsset:quilt:o365.prod:pages/tags/TagPage:board:AppsonAzureBlog-1750285381160":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/tags/TagPage:board:AppsonAzureBlog-1750285381160","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:1750069323906":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1750069323906","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.tempStatusBanner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1750285382165","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.tempStatusBanner-en-us-1750268247098":{"__typename":"CachedAsset","id":"component:custom.widget.tempStatusBanner-en-us-1750268247098","value":{"component":{"id":"custom.widget.tempStatusBanner","template":{"id":"tempStatusBanner","markupLanguage":"HTML","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.tempStatusBanner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-us-1750268247098":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-us-1750268247098","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-us-1750268247098":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-us-1750268247098","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: 50px;\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\n.social-share-email-image:hover {\n border-radius: 0;\n}\n\n.social-link-footer:hover .linkedin-icon {\n border-radius: 0;\n}\n.social-link-footer:hover .social-share-email-image {\n border-radius: 0;\n}\n\n.social-link-footer img {\n width: 30px;\n height: auto;\n transition: filter 0.3s ease;\n}\n\n.social-share-list {\n width: 50px;\n}\n.social-share-rss-image {\n width: 30px;\n height: auto;\n transition: filter 0.3s ease;\n}\n.sharing-options li {\n width: 50px;\n height: 50px;\n padding: 8px;\n box-sizing: border-box;\n border: 2px solid white; \n display: inline-block;\n text-align: center;\n opacity: 1;\n visibility: visible;\n transition: border 0.3s ease; /* Smooth transition effect */\n border-left: none;\n border-bottom: none; /* Apply bottom border to only last item */\n}\n\n.social-share-list-linkedin {\n background-color: #0474b4;\n border-top-right-radius: 5px; /* Rounded top right corner of first item*/\n}\n.social-share-list-facebook {\n background-color: #3c5c9c;\n}\n.social-share-list-xicon {\n background-color: #000;\n}\n.social-share-list-reddit {\n background-color: #fc4404;\n}\n.social-share-list-bluesky {\n background-color: #f0f2f5;\n}\n.social-share-list-rss {\n background-color: #ec7b1c;\n}\n.social-share-list-mail {\n background-color: #848484; \n border-bottom-right-radius: 5px; /* Rounded bottom right corner of last item*/\n}\n.sharing-options li.social-share-list-mail {\n border-bottom: 2px solid white; /* Add bottom border only to the last item */\n height: 52px; /* Increase last child height to make in align with the hover label */\n}\n.x-icon {\n filter: invert(100%);\n transition: filter 0.3s ease;\n width: 20px !important;\n height: auto;\n padding-top: 5px !important;\n}\n.bluesky-icon {\n filter: invert(20%) sepia(100%) saturate(3000%) hue-rotate(180deg);\n transition: filter 0.3s ease;\n padding-top: 5px !important;\n width: 25px !important;\n}\n\n.share-icon {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n\n.sharing-options li:hover {\n border: 2px solid white; \n border-left: none;\n border-bottom: none;\n border-radius: 0px;\n}\n.sharing-options li.social-share-list-mail:hover {\n border-bottom: 2px solid white; /* Add bottom border only to the last item */\n}\n\n.sharing-options li: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: 52px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px 12px 15px 8px;\n border: 2px solid white;\n}\n.linkedin {\n background-color: #0474b4;\n border-top-right-radius: 5px; /* Rounded top right corner of first item*/\n}\n.facebook {\n background-color: #3c5c9c;\n}\n.twitter {\n background-color: black;\n color: white;\n}\n.reddit {\n background-color: #fc4404;\n}\n.mail {\n background-color: #848484;\n border-bottom-right-radius: 5px; /* Rounded bottom right corner of last item*/\n}\n.bluesky {\n background-color: #f0f2f5;\n color: black;\n}\n.rss {\n background-color: #ec7b1c;\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_yuh6w_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_yuh6w_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_yuh6w_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_yuh6w_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_yuh6w_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_yuh6w_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_yuh6w_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_yuh6w_78.custom_widget_MicrosoftFooter_f-bare_yuh6w_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_yuh6w_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_yuh6w_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_yuh6w_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_yuh6w_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_yuh6w_78.custom_widget_MicrosoftFooter_f-bare_yuh6w_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_yuh6w_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_yuh6w_146 {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 3.125rem;\n border-radius: 0 0.4375rem 0.4375rem 0;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_yuh6w_156 {\n border-top-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_yuh6w_156:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-share-email-image_yuh6w_163:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_yuh6w_167:hover .custom_widget_MicrosoftFooter_linkedin-icon_yuh6w_156 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_yuh6w_167:hover .custom_widget_MicrosoftFooter_social-share-email-image_yuh6w_163 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_yuh6w_167 img {\n width: 1.875rem;\n height: auto;\n transition: filter 0.3s ease;\n}\n.custom_widget_MicrosoftFooter_social-share-list_yuh6w_180 {\n width: 3.125rem;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_yuh6w_183 {\n width: 1.875rem;\n height: auto;\n transition: filter 0.3s ease;\n}\n.custom_widget_MicrosoftFooter_sharing-options_yuh6w_146 li {\n width: 3.125rem;\n height: 3.125rem;\n padding: 0.5rem;\n box-sizing: border-box;\n border: 2px solid white; \n display: inline-block;\n text-align: center;\n opacity: 1;\n visibility: visible;\n transition: border 0.3s ease; /* Smooth transition effect */\n border-left: none;\n border-bottom: none; /* Apply bottom border to only last item */\n}\n.custom_widget_MicrosoftFooter_social-share-list-linkedin_yuh6w_203 {\n background-color: #0474b4;\n border-top-right-radius: 5px; /* Rounded top right corner of first item*/\n}\n.custom_widget_MicrosoftFooter_social-share-list-facebook_yuh6w_207 {\n background-color: #3c5c9c;\n}\n.custom_widget_MicrosoftFooter_social-share-list-xicon_yuh6w_210 {\n background-color: #000;\n}\n.custom_widget_MicrosoftFooter_social-share-list-reddit_yuh6w_213 {\n background-color: #fc4404;\n}\n.custom_widget_MicrosoftFooter_social-share-list-bluesky_yuh6w_216 {\n background-color: #f0f2f5;\n}\n.custom_widget_MicrosoftFooter_social-share-list-rss_yuh6w_219 {\n background-color: #ec7b1c;\n}\n.custom_widget_MicrosoftFooter_social-share-list-mail_yuh6w_222 {\n background-color: #848484; \n border-bottom-right-radius: 5px; /* Rounded bottom right corner of last item*/\n}\n.custom_widget_MicrosoftFooter_sharing-options_yuh6w_146 li.custom_widget_MicrosoftFooter_social-share-list-mail_yuh6w_222 {\n border-bottom: 2px solid white; /* Add bottom border only to the last item */\n height: 3.25rem; /* Increase last child height to make in align with the hover label */\n}\n.custom_widget_MicrosoftFooter_x-icon_yuh6w_230 {\n filter: invert(100%);\n transition: filter 0.3s ease;\n width: 1.25rem !important;\n height: auto;\n padding-top: 0.3125rem !important;\n}\n.custom_widget_MicrosoftFooter_bluesky-icon_yuh6w_237 {\n filter: invert(20%) sepia(100%) saturate(3000%) hue-rotate(180deg);\n transition: filter 0.3s ease;\n padding-top: 0.3125rem !important;\n width: 1.5625rem !important;\n}\n.custom_widget_MicrosoftFooter_share-icon_yuh6w_244 {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n.custom_widget_MicrosoftFooter_sharing-options_yuh6w_146 li:hover {\n border: 2px solid white; \n border-left: none;\n border-bottom: none;\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_sharing-options_yuh6w_146 li.custom_widget_MicrosoftFooter_social-share-list-mail_yuh6w_222:hover {\n border-bottom: 2px solid white; /* Add bottom border only to the last item */\n}\n.custom_widget_MicrosoftFooter_sharing-options_yuh6w_146 li:hover .custom_widget_MicrosoftFooter_label_yuh6w_260 {\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_yuh6w_260 {\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: 3.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.625rem 0.75rem 0.9375rem 0.5rem;\n border: 2px solid white;\n}\n.custom_widget_MicrosoftFooter_linkedin_yuh6w_156 {\n background-color: #0474b4;\n border-top-right-radius: 5px; /* Rounded top right corner of first item*/\n}\n.custom_widget_MicrosoftFooter_facebook_yuh6w_290 {\n background-color: #3c5c9c;\n}\n.custom_widget_MicrosoftFooter_twitter_yuh6w_293 {\n background-color: black;\n color: white;\n}\n.custom_widget_MicrosoftFooter_reddit_yuh6w_297 {\n background-color: #fc4404;\n}\n.custom_widget_MicrosoftFooter_mail_yuh6w_300 {\n background-color: #848484;\n border-bottom-right-radius: 5px; /* Rounded bottom right corner of last item*/\n}\n.custom_widget_MicrosoftFooter_bluesky_yuh6w_237 {\n background-color: #f0f2f5;\n color: black;\n}\n.custom_widget_MicrosoftFooter_rss_yuh6w_308 {\n background-color: #ec7b1c;\n}\n@media (max-width: 991px) {\n .custom_widget_MicrosoftFooter_social-share_yuh6w_138 {\n display: none;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_yuh6w_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_yuh6w_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_yuh6w_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_yuh6w_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_yuh6w_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_yuh6w_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_yuh6w_58","c-list":"custom_widget_MicrosoftFooter_c-list_yuh6w_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_yuh6w_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_yuh6w_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_yuh6w_107","social-share":"custom_widget_MicrosoftFooter_social-share_yuh6w_138","sharing-options":"custom_widget_MicrosoftFooter_sharing-options_yuh6w_146","linkedin-icon":"custom_widget_MicrosoftFooter_linkedin-icon_yuh6w_156","social-share-email-image":"custom_widget_MicrosoftFooter_social-share-email-image_yuh6w_163","social-link-footer":"custom_widget_MicrosoftFooter_social-link-footer_yuh6w_167","social-share-list":"custom_widget_MicrosoftFooter_social-share-list_yuh6w_180","social-share-rss-image":"custom_widget_MicrosoftFooter_social-share-rss-image_yuh6w_183","social-share-list-linkedin":"custom_widget_MicrosoftFooter_social-share-list-linkedin_yuh6w_203","social-share-list-facebook":"custom_widget_MicrosoftFooter_social-share-list-facebook_yuh6w_207","social-share-list-xicon":"custom_widget_MicrosoftFooter_social-share-list-xicon_yuh6w_210","social-share-list-reddit":"custom_widget_MicrosoftFooter_social-share-list-reddit_yuh6w_213","social-share-list-bluesky":"custom_widget_MicrosoftFooter_social-share-list-bluesky_yuh6w_216","social-share-list-rss":"custom_widget_MicrosoftFooter_social-share-list-rss_yuh6w_219","social-share-list-mail":"custom_widget_MicrosoftFooter_social-share-list-mail_yuh6w_222","x-icon":"custom_widget_MicrosoftFooter_x-icon_yuh6w_230","bluesky-icon":"custom_widget_MicrosoftFooter_bluesky-icon_yuh6w_237","share-icon":"custom_widget_MicrosoftFooter_share-icon_yuh6w_244","label":"custom_widget_MicrosoftFooter_label_yuh6w_260","linkedin":"custom_widget_MicrosoftFooter_linkedin_yuh6w_156","facebook":"custom_widget_MicrosoftFooter_facebook_yuh6w_290","twitter":"custom_widget_MicrosoftFooter_twitter_yuh6w_293","reddit":"custom_widget_MicrosoftFooter_reddit_yuh6w_297","mail":"custom_widget_MicrosoftFooter_mail_yuh6w_300","bluesky":"custom_widget_MicrosoftFooter_bluesky_yuh6w_237","rss":"custom_widget_MicrosoftFooter_rss_yuh6w_308"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1750285382165","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagsHeaderWidget-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagsHeaderWidget-1750285382165","value":{"tag":"{tagName}","topicsCount":"{count} {count, plural, one {Topic} other {Topics}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1750285382165","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:1750285192085":"Latest Blog Articles","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: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:4420278":{"__typename":"Conversation","id":"conversation:4420278","topic":{"__typename":"BlogTopicMessage","uid":4420278},"lastPostingActivityTime":"2025-06-03T15:53:19.032-07:00","solved":false},"User:user:173831":{"__typename":"User","uid":173831,"login":"Bruno Borges","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xNzM4MzEtdHFZTXMz?image-coordinates=0%2C0%2C1477%2C1477"},"id":"user:173831"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LW5VSHJHSQ?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LW5VSHJHSQ?revision=1","title":"url_upload.jpg","associationType":"COVER","width":3000,"height":2000,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LUdNdEMwNQ?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LUdNdEMwNQ?revision=1","title":"clipboard_image-1-1748991116932.png","associationType":"BODY","width":150,"height":150,"altText":""},"BlogTopicMessage:message:4420278":{"__typename":"BlogTopicMessage","subject":"Announcing Azure Command Launcher for Java","conversation":{"__ref":"Conversation:conversation:4420278"},"id":"message:4420278","revisionNum":1,"uid":4420278,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:173831"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":251},"postTime":"2025-06-03T15:53:19.032-07:00","lastPublishTime":"2025-06-03T15:53:19.032-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Optimizing JVM Configuration for Azure Deployments \n Tuning the Java Virtual Machine (JVM) for cloud deployments is notoriously challenging. Over 30% of developers tend to deploy Java workloads with no JVM configuration at all, therefore relying on the default settings of the HotSpot JVM. \n The default settings in OpenJDK are intentionally conservative, designed to work across a wide range of environments and scenarios. However, these defaults often lead to suboptimal resource utilization in cloud-based deployments, where memory and CPU tend to be dedicated for application workloads (use of containers and VMs) but still require intelligent management to maximize efficiency and cost-effectiveness. \n \n To address this, we are excited to introduce jaz, a new JVM launcher optimized specifically for Azure. jaz provides better default ergonomics for Java applications running in containers and virtual machines, ensuring a more efficient use of resources right from the start, and leverages advanced JVM features automatically, such as AppCDS and in the future, Project Leyden. \n Why jaz? \n Conservative Defaults Lead to Underutilization of Resources \n When deploying Java applications to the cloud, developers often need to fine-tune JVM parameters such as heap size, garbage collection strategies, and other tuning configurations to achieve better resource utilization and potentially higher performance. The default OpenJDK settings, while safe, do not take full advantage of available resources in cloud environments, leading to unnecessary waste and increased operational costs. \n While advancements in dynamic heap sizing are underway by Oracle, Google, and Microsoft, they are still in development and will be available primarily in future major releases of OpenJDK. In the meantime, developers running applications on current and older JDK versions (such as OpenJDK 8, 11, 17, and 21) still need to optimize their configurations manually or rely on external tools like Paketo Buildpacks, which automate tuning but may not be suitable for all use cases. \n With jaz, we are providing a smarter starting point for Java applications on Azure, with default configurations designed for cloud environments. The jaz launcher helps by: \n \n Optimizing resource utilization: By setting JVM parameters tailored for cloud deployments, jaz reduces wasted memory and CPU cycles. \n Improve first-deploy performance: New applications often require trial and error to find the right JVM settings. jaz increases the likelihood of better performance on first deployment. \n Enhance cost efficiency: By making better use of available resources, applications using jaz can reduce unnecessary cloud costs. \n \n This tool is ideal for developers who: \n \n Want better JVM defaults without diving deep into tuning guides \n Develop and deploy cloud native microservices with Spring Boot, Quarkus, or Micronaut \n Prefer container-based workflows such as Kubernetes and OpenShift \n Deploy Java workloads on Azure Container Apps, Azure Kubernetes Service, Azure Red Hat OpenShift, or Azure VMs \n \n How jaz works? \n jaz sits between your container startup command and the JVM. It will: \n \n Detect the cloud environment (e.g., container limits, available memory) \n Analyzes the workload type and selects best-fit JVM options \n Launches the Java process with optimized flags, such as: \n \n \n \n \n Heap sizing \n GC selection and tuning \n Logging and diagnostics settings as needed \n \n \n \n Example Usage \n Instead of this: \n $ JAVA_OPTS=\"-XX:... several JVM tuning flags\" $ java $JAVA_OPTS -jar myapp.jar\" \n Use: \n $ jaz -jar myapp.jar \n You will automatically benefit from: \n \n Battle-tested defaults for cloud native and container workloads \n Reduced memory waste \n Better startup and warmup performance \n No manual tuning required \n \n How to Access jaz (Private Preview) \n jaz is currently available through a Private Preview. During this phase, we are working closely with selected customers to refine the experience and gather feedback. \n To request access: \n 👉 Submit your interest here \n Participants in the Private Preview will receive access to jaz via easily installed standalone Linux packages for container images of the Microsoft Build of OpenJDK and Eclipse Temurin (for Java 8). Customers will have direct communication with our engineering and product teams to further enhance the tool to fit their needs. For a sneak peek, you can read the documentation. \n Our Roadmap \n Our long-term vision for jaz includes adaptive JVM configuration based on telemetry and usage patterns, helping developers achieve optimal performance across all Azure services. \n \n ⚙️ JVM Configuration Profiles \n 📦 AppCDS Support \n 📦 Leyden Support \n 🔄 Continuous Tuning \n 📊 Share telemetry through Prometheus \n \n We’re excited to work with the Java community to shape this tool. Your feedback will be critical in helping us deliver a smarter, cloud-native Java runtime experience on Azure. ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5080","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LW5VSHJHSQ?revision=1\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDIwMjc4LUdNdEMwNQ?revision=1\"}"}}],"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/bS00NDIwMjc4LW5VSHJHSQ?revision=1"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4414784":{"__typename":"Conversation","id":"conversation:4414784","topic":{"__typename":"BlogTopicMessage","uid":4414784},"lastPostingActivityTime":"2025-05-22T01:35:36.414-07:00","solved":false},"User:user:484972":{"__typename":"User","uid":484972,"login":"Sean_Li","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS00ODQ5NzItNTMyMzk1aUI2MEQxRDcxMkM5M0FCNzk"},"id":"user:484972"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVJGcFpSUg?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVJGcFpSUg?revision=15","title":"public preview.jpg","associationType":"COVER","width":1822,"height":1317,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFrM1YzZw?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFrM1YzZw?revision=15","title":"image.png","associationType":"BODY","width":2152,"height":427,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LU1ZdmFIWQ?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LU1ZdmFIWQ?revision=15","title":"clipboard_image-2-1747447659639.png","associationType":"BODY","width":2279,"height":1110,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBwNERTcA?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBwNERTcA?revision=15","title":"assessment.gif","associationType":"BODY","width":1280,"height":720,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVZFeEpCdQ?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVZFeEpCdQ?revision=15","title":"apply_formula.gif","associationType":"BODY","width":1280,"height":720,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXJBZlVlRQ?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXJBZlVlRQ?revision=15","title":"custom_formula.gif","associationType":"BODY","width":1280,"height":720,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFKM3pwNg?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFKM3pwNg?revision=15","title":"buildfix.gif","associationType":"BODY","width":1920,"height":1080,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LWxocFVtQg?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LWxocFVtQg?revision=15","title":"Post_Upgrade_CVE_check.gif","associationType":"BODY","width":3840,"height":2160,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LTZ6RG1Wdg?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LTZ6RG1Wdg?revision=15","title":"DeployBuildBlogGif.gif","associationType":"BODY","width":1994,"height":1122,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXR4VVZ3Vw?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXR4VVZ3Vw?revision=15","title":"image.png","associationType":"BODY","width":2298,"height":1210,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBicm1pNA?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBicm1pNA?revision=15","title":"image.png","associationType":"BODY","width":2309,"height":1227,"altText":""},"BlogTopicMessage:message:4414784":{"__typename":"BlogTopicMessage","subject":"Public Preview: GitHub Copilot App Modernization for Java","conversation":{"__ref":"Conversation:conversation:4414784"},"id":"message:4414784","revisionNum":15,"uid":4414784,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:484972"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":593},"postTime":"2025-05-19T17:53:55.191-07:00","lastPublishTime":"2025-05-22T01:35:36.414-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Modernizing Java applications and migrating to the cloud is typically a complex, labor-intensive, and fragmented process. GitHub Copilot App Modernization for Java is a powerful solution designed to simplify and accelerate your journey to the cloud. App Modernization and upgrade for Java offers an intelligent, guided approach that automates Java version upgrade and repetitive tasks and improves consistency — saving time, reducing risks, and accelerating time-to-cloud. \n GitHub Copilot App Modernization and upgrade for Java is in public preview and offered in a single extension pack, available in the VS Code marketplace. https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-app-mod-pack \n \n \n The GitHub Copilot App Modernization for Java provides six distinct value pillars, each specifically tailored to address particular challenges encountered during the Java application modernization process. \n \n 1.Intelligent Issue Analysis & Recommendations \n Modernization starts with insight. Whether you’re upgrading Java runtime or migrating to Azure, modernization starts with understanding your code. \n GitHub Copilot App Modernization for Java analyzes your project’s current state and generates a modernization plan, offering context-aware fixes and actionable recommendations from Azure Migrate Application Code Assessment Tool (AppCAT), so you spend less time diagnosing and more time modernizing. \n AppCAT is also available as a stand-alone CLI tool that you can run independently from the App Modernization for Java VS Code extension. See AppCAT for Java to learn more. \n \n 2. Expert-Led Code Transformation \n Once plan is generated, GitHub Copilot App Modernization for Java is a powerful code transformation engine that combines expert-led migration strategies and automated Java upgrade. Whether you're moving from Java 8 to Java 21 or replatforming for Azure services, Copilot applies structured changes with precision. \n For modernization scenarios, GitHub Copilot App Modernization for Java offers predefined AI-powered formulas that encode proven migration strategies, applying expert knowledge to common Java-to-Azure scenarios with high accuracy. Currently, app modernization for Java offers predefined formulas that cover common migration scenarios including secret management, message queue integration, Identity and more. See predefined formulas for complete list of formulas available. \n For Java upgrades, GitHub Copilot App Modernization for Java uses tools like OpenRewrite to perform refactoring, including API replacements and dependency updates, while GitHub Copilot addresses any remaining issues. \n \n 3. Automation Through Learning \n Beyond predefined formulas or strategies, developers can capture migration logic into reusable formulas, by converting Git commits into reusable migration patterns, or custom formulas, allowing Copilot to apply learned remediations across multiple codebases with consistency and precision. \n Custom formulas can be created from one or more commits, provided they accurately reflect the intended coding behaviors. The example below combines previous code changes from local file to Azure Blob and RabbitMQ to Azure Service Bus into one powerful, all-encompassing formula, and executes it against my current project. \n \n Whether you're applying a fix in the Java upgrade or ensuring Azure migration consistency across teams, GitHub Copilot uses these learned patterns to accelerate transformation with precision and repeatability. \n \n 4. Build Issue Resolution \n Modernization isn't complete until your application successfully builds. GitHub Copilot App Modernization for Java helps resolve issues automatically and performs test validations, ensuring error-free transformations and keeping your production pipelines running smoothly. \n 5. Automatic patching for CVEs \n The GitHub Copilot App Modernization for Java scans for CVE vulnerabilities after the upgrade process is completed. When CVE issues are detected, the tool automatically fixes the issues within the Agent Mode, allowing the user to review the fixes. This improves the application's security posture and ensures compliance with organizational guidelines. \n \n 6. Automated Deployment to Azure \n When you’re ready, GitHub Copilot for Azure helps facilitate automated deployment to Azure, completing the app modernization process. When the Copilot agent is requested to deploy your application, it creates the required Infrastructure as Code files, deploys the application, addresses any deployment errors encountered, and sets up CI/CD pipelines. GitHub Copilot for Azure is a separate extension today and efforts are underway to integrate it with GitHub Copilot App Modernization for Java. \n \n What our customers are saying \n \n \n Get Started Today \n Modernize your first app :https://aka.ms/AM4JGetStarted Upgrade your first app: https://aka.ms/ghcp-appmod/java-upgrade-docs Deploy your app to Azure: https://aka.ms/copilot-agent-deploy Self-paced workshop: https://aka.ms/AM4JWorkshop Provide feedback: https://aka.ms/AM4JFeedback ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5586","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVJGcFpSUg?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFrM1YzZw?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LU1ZdmFIWQ?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBwNERTcA?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVZFeEpCdQ?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXJBZlVlRQ?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LUFKM3pwNg?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LWxocFVtQg?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LTZ6RG1Wdg?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LXR4VVZ3Vw?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVBicm1pNA?revision=15\"}"}}],"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":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0Nzg0LVJGcFpSUg?revision=15"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4412465":{"__typename":"Conversation","id":"conversation:4412465","topic":{"__typename":"BlogTopicMessage","uid":4412465},"lastPostingActivityTime":"2025-05-21T15:08:14.916-07:00","solved":false},"User:user:11830":{"__typename":"User","uid":11830,"login":"Stefan_Schackow","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/avatars/default/avatar-4.svg?time=0"},"id":"user:11830"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUtQYVZwbg?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUtQYVZwbg?revision=60","title":"BlogArticleImageHeader.png","associationType":"COVER","width":512,"height":512,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTBKSTVDdw?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTBKSTVDdw?revision=60","title":"image.png","associationType":"BODY","width":706,"height":642,"altText":"Premium v4 for App Service"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LXBNRHpBVg?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LXBNRHpBVg?revision=60","title":"image.png","associationType":"BODY","width":936,"height":655,"altText":"Availability Zones on App Service"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LW5mcWtOag?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LW5mcWtOag?revision=60","title":"clipboard_image-1-1747078346469.png","associationType":"BODY","width":1918,"height":1031,"altText":".Net Aspire Dashboard Running on App Service"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LVF6TjF4cQ?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LVF6TjF4cQ?revision=60","title":"image.png","associationType":"BODY","width":974,"height":263,"altText":"Configuring Sidecar SLM Extensions"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUhLMk9UQg?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUhLMk9UQg?revision=60","title":"image.png","associationType":"BODY","width":1040,"height":827,"altText":"SRE Agent Chat Interface"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWNPNHJBQg?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWNPNHJBQg?revision=60","title":"image.png","associationType":"BODY","width":413,"height":747,"altText":"Create new WebJobs in Azure Portal"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWZjcnhmbg?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWZjcnhmbg?revision=60","title":"image.png","associationType":"BODY","width":974,"height":229,"altText":"New Hybrid Connections UX"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTVqYVRIQQ?revision=60\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTVqYVRIQQ?revision=60","title":"image.png","associationType":"BODY","width":801,"height":274,"altText":"Network Connectivity Troubleshooter"},"BlogTopicMessage:message:4412465":{"__typename":"BlogTopicMessage","subject":"What's New in Azure App Service at #MSBuild 2025","conversation":{"__ref":"Conversation:conversation:4412465"},"id":"message:4412465","revisionNum":60,"uid":4412465,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:11830"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"A new Premium v4 plan that offers enhanced performance at lower cost of ownership. .NET Aspire, AI integration, and more! Two-zone Availability Zones and more flexibility to configure zone support. ","metrics":{"__typename":"MessageMetrics","views":2042},"postTime":"2025-05-19T09:10:05.799-07:00","lastPublishTime":"2025-05-21T15:08:14.916-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" New App Service Premium v4 plan \n The new App Service Premium v4 (Pv4) plan has entered public preview at Microsoft Build 2025 for both Windows and Linux! This new plan is designed to support today's highly demanding application performance, scale, and budgets. Built on the latest \"v6\" general-purpose virtual machines and memory-optimized x64 Azure hardware with faster processors and NVMe temporary storage, it provides a noticeable performance uplift over prior generations of App Service Premium plans (over 25% in early testing). The Premium v4 offering includes nine new sizes ranging from P0v4 with a single virtual CPU and 4GB RAM all the way up through P5mv4, with 32 virtual CPUs and 256GB RAM, providing CPU and memory options to meet any business need. \n App Service Premium v4 plans provide attractive price-performance across the entire performance curve for both Windows and Linux customers. Premium v4 customers using pay-as-you-go (PAYG) on Azure App Service for Windows can expect to save up to 24% compared with prior Premium plans. We plan to provide deeper commitment-based discounts such as reserved instances and savings plan at GA. \n For more detailed pricing on the various CPU and memory options, see the pricing pages for Windows and Linux as well as the Azure Pricing Calculator. \n \n App Service currently has Pv4 deployed in a few regions with more regions being regularly added. For more details on how to configure app service plans with Premium v4 as well as a regularly updated list of regional availability, see the product documentation and start taking advantage of faster performance today! \n 2-zone Availability Zone support is now generally available \n With a recently completed platform update in May, customers now enjoy the 99.99% Availability Zone (AZ) SLA when running on only two instances (instead of three)! As part of this update more parts of the App Service footprint have enabled AZ support “in place”, which means many existing app service plans can now also use Availability Zones. \n Availability Zone configuration for app service plans is also now mutable. This means if an app service plan is running on an AZ-enabled part of the App Service footprint, customers can choose to enable and disable Availability Zone support at any time. Read more about the new Availability Zone options in the announcement article! \n ARM/CLI surface area for Availability Zone support has also been updated to provide increased visibility into AZ configuration details. The same enhanced visibility is also coming to the Azure Portal in June. With these changes customers can determine if an App Service plan is on an AZ-enabled scale unit, as well as how many zones are available for zone spanning. This allows customers to deploy with either two zones, or three zones (where available), of zone spanning for their App Service plans. For App Service plans that are AZ-enabled, customers will also be able to see the physical zone placement of each AZ enabled App Service plan. \n \n Availability Zone support is available on the new Premium v4 plan, and also supported with Premium v2, Premium v3, and the dedicated App Service Environment v3 (Isolated V2 plan). Check out the Availability Zone options for your App Service plans and start getting the benefits of zone resiliency today! \n .NET Aspire on Azure App Service \n .NET Aspire support is now available in public preview for App Service on Linux! .NET Aspire developers creating applications have an additional deployment option with App Service as a deployment target. Developers can create multi-app/multi-service .NET Aspire applications locally and deploy them into Azure using the new App Service deployment provider. \n The App Service and .NET Aspire teams worked together to create an App Service “provider” using .NET Aspire’s new “provider model”. The build provider translates the code-centric view of a .NET Aspire application topology into an Azure deployment mapped onto App Service constructs. The App Service provider supports securely deploying multiple .NET Aspire applications, with observability via the familiar .NET Aspire dashboard coming in the near future. \n \n The Getting Started with .NET Aspire on Azure App Service blog has instructions on how to create a .NET Aspire project for deployment onto App Service, as well a link for providing feedback. If you happen to be at Build 2025, drop by our booth or the theatre session “DEM548: How .NET Aspire on App Service enhances modern app development” to see live demonstrations of the App Service support for .NET Aspire! \n Using App Service to build agentic AI apps \n The last few months of intelligent app development have seen a frenetic pace of change with the rapid evolution of agents on Azure AI Foundry Agent Service and new agent extensibility options like Model Context Protocol (MCP) opening avenues for integrating existing data sources and APIs into agentic architectures. Here's a quick run-down of useful resources published recently: \n \n This article demonstrates hosting a remote MCP server on Azure App Service. The sample is an adaptation of the weather service example from the MCP site. The App Service variation also includes an azd template for easy experimentation via a CLI deployment to App Service! \n This article walks through integrating a .NET Core implementation of a “To-Do” list API running on App Service with an agent created on Azure AI Foundry Agent Service. It’s a straightforward example demonstrating how developers can bring together the power of AI agents with existing web API investments. \n Quick start guides for using App Service with Azure Open AI in your language of choice -- Python, Node, .NET, and Java. \n Using Microsoft Research’s latest 1-bit “super-small” language model, BitNet on App Service. \n Enhance search queries on text data stored in Azure SQL DB using natural language vector functions and Azure App Service. Includes an accompanying azd example. \n How to use Azure AI Search hybrid search capabilities from App Service with .NET (Blazor), Java (Spring Boot), Node (Express), or Python (FastAPI). \n Use GitHub Copilot to compare your application’s bicep against a representative “best practices” bicep definition and then generate the necessary bicep diff. \n \n In addition, using Sidecar for App Service on Linux, developers can easily connect Phi SLMs to their applications. Examples using the chat completion endpoint in the SLM sidecar extensions are available in this GitHub repo with code examples for .NET, Node, Python and Java. There are also accompanying docs for .NET, Node, Python (FastAPI) and Java (Spring Boot) which go into more details on using the SLM sidecar extensions. \n The sidecar extensions capability is also now enabled in the Azure Portal. \n \n \n AI Labs at Microsoft Build \n For those of you attending Microsoft Build in person, we will have labs for additional hands-on experience using AI with Azure App Service. \n LAB347: Add AI experiences to existing .NET apps using Sidecar in App Service \n This lab (first lab occurrence and second lab occurrence - see Exercise 4) covers an e-commerce inventory API (written in .NET) integrated with an agent running on Azure AI Foundry Agent Service. When a customer interacts with the AI agent it automatically invokes the appropriate web APIs to fetch real-time inventory information, add/remove products in a shopping cart, and increment/decrement product inventory. This is a great example of an AI powered agent grounded in a company’s ever changing transactional data. As a fun sidenote, GitHub Copilot was used extensively to build >95% of the sample application as well as to generate the OpenAPI specification that integrates the inventory web API with the AI agent! \n The same AI-on-App Service lab (Exercise 1) walks developers through integrating a basic Azure OpenAI chat interface into a web application. The lab also demonstrates using a background WebJob on Linux with Azure OpenAI (Exercise 2) to categorize user sentiment for product reviews. The lab also shows (Exercise 3) how to use a small language model (SLM) like Microsoft’s Phi-4 model in a WebJob to perform similar categorization, without the need to call out to an LLM. Although SLMs are not as powerful as LLMs, SLMs are an interesting alternative for integrating AI functionality where either cost, or control over AI data flows, are considerations. \n Azure SRE Agent for App Service \n One of the big announcements at Build this year was the Agentic DevOps announcement, which includes the new Azure SRE Agent. Designed to empower Site Reliability Engineers (SRE), the SRE Agent is a new agentic service that can manage Azure application platform services. including App Service, Functions, and Azure Container Apps to name just a few. It provides automatic incident response and mitigation, faster root cause analysis (RCA) of production issues, and continuous monitoring of application health and performance. With SRE Agent, you can use a natural language interface for managing your web applications on Azure App Service. \n To be an early adopter of the Agentic DevOps revolution, check out the announcement blog and sign-up to join the SRE Agent preview as it starts rolling out! \n \n WebJobs for App Service on Linux (GA) \n WebJobs for App Service on Linux just recently GA’d earlier this month. With this functionality developers can implement the same “infra-glue” style of background jobs that they have enjoyed with App service on Windows. Take a look at the documentationdemonstrating WebJobs support for shell scripts, Python, Java, .NET and Node on Linux! \n \n As mentioned earlier, the AI-on-App Service lab at this year’s Build conference has two code examples (see Exercise 2 and Exercise 3) demonstrating Linux WebJobs with Azure OpenAI, as well as a locally connected Phi-4 Small Language Model (SLM) sidecar, to categorize user sentiment for submitted product reviews. These are great examples of creatively using WebJobs to perform background batch-style work with your AI resources. Also keep an eye out for the upcoming WebJobs for Windows Containers GA which is planned “soon” this summer! \n Language and Framework Updates \n In addition to the release of .NET Aspire support for App Service, the App Service team has kept busy updating myriad Node, Python, Java/JBoss, .NET and PHP versions. To give an idea of the scope of effort keeping language and framework versions up to date across both Windows and Linux, App Service released more than two dozen language/framework specific updates in the last few weeks prior to Build. That represents the ongoing platform commitment to keeping languages regularly updated without the need for developers to explicitly invest time and effort doing so themselves. \n Just last month, Strapi support was introduced for App Service on Linux! Strapi is an open source headless Javascript based content management system that provides developers a robust platform for developing and delivering content across a variety of formats. The Azure Marketplace Strapi offering provides customization control, global availability and pre-built integration to essential Azure services like Azure Database for MySQL or PostgreSQL and Azure Email Communication Services. Deep dive on the details of hosting Strapi on App Service in this article. \n The custom error pages feature for App Service has also been updated just prior to Build. Custom error pages enable developers to customize the response rendered for common HTTP errors (403, 502 and 503) which are returned by the platform. This release includes a new option to always render custom errors regardless of whether the HTTP error was platform generated, or application generated. There will also be an Azure Portal update coming in June with support for the new custom error page features! \n Looking ahead to summer, stay tuned for the impending arrival of .NET 10 preview bits on App Service across both Windows and Linux! \n Networking and ASE Updates \n App Service support for public inbound IPv6 traffic is availablein most regions in public preview, with the service working towards a planned GA of inbound IPv6 support during the summer. Inbound IPv6 is supported for both IPv6-only upstream clients, as well dual-stack scenarios where a web application is reachable over either an IPv4 address or an IPv6 address. As part of an upcoming summer release, App Service will be delivering a public preview of *outbound* IPv6 traffic. For details on using IPv6 on App Service, as well to track all of the upcoming updates, consult this article: Announcing inbound IPv6 support in public preview - Azure App Service. \n For App Service Environment (ASE) customers, App Service will soon be releasing new support for adding custom Certificate Authorities (CAs) to an ASE. This new support will enable securing inbound TLS traffic using certificates issued by a custom Certificate Authority. \n Hybrid Connections customers will be happy to see that a new version of the App Service Hybrid Connection Manager (HCM) was just released just a few weeks ago. The new HCM delivers updated UX support for both Linux and Windows customers, enhanced logging and connection testing, and a brand new CLI for scripting and command-line management of Hybrid Connections! \n \n You might have missed it, but there was a recent addition to the troubleshooting options on App Service with the new Network Troubleshooter! The Network Troubleshooter offers comprehensive analysis and actionable insights to resolve connectivity failures for both Linux and Windows web apps. It tests connectivity to Azure resources like Storage, Redis, SQL Server, MySQL server, and other apps running on App Service. It diagnoses connectivity problems with Private endpoints, Service endpoints, and Internet-based endpoints, detects NAT gateways, and investigates DNS failures with custom DNS servers. Additionally, it provides actionable recommendations and surfaces any network rules it finds that are blocking connectivity. \n \n If you regularly wrestle with connectivity challenges, give the Network Troubleshooter a try! \n Next Steps \n Developers can learn more about Azure App Service at Getting Started with Azure App Service. Stay up to date on new features and innovations on Azure App Service via Azure Updates as well as the Azure App Service (@AzAppService) X feed. There is always a steady stream of great deep-dive technical articles about App Service as well as the breadth of developer focused Azure services over on the Apps on Azure blog. \n And lastly take a look at Azure App Service Community Standups hosted on the Microsoft Azure Developers YouTube channel. The Azure App Service Community Standup series regularly features walkthroughs of new and upcoming features from folks that work directly on the product! \n Build 2025 Session Reference \n (Note: all times below are listed in Seattle time - Pacific Daylight Time) \n (Note: some labs have more than one timeslot spanning multiple days) \n \n Innovate, deploy, & optimize your apps without infrastructure hassles \n https://build.microsoft.com/en-US/sessions/BRK201 \n Monday, May 19 th 11:15 AM – 12:15 PM Pacific Daylight Time \n Arch, 705 Pike, Level 6, Room 606 \n Breakout, Streaming Online and Recorded Session (BRK201) \n \n Quickly build, deploy, and scale web apps and APIs globally with App Service \n https://build.microsoft.com/en-US/sessions/BRK200 \n Tuesday, May 20 th 11:45 AM – 12:45 PM Pacific Daylight Time \n Arch, 705 Pike, Level 6, Room 608 \n Breakout, Streaming Online and Recorded Session (BRK200) \n \n Simplifying .NET upgrades with GitHub Copilot \n https://build.microsoft.com/en-US/sessions/DEM549 \n Monday, May 19 th 5:05 PM - 5:20 PM Pacific Daylight Time \n Arch, 705 Pike, Level 4, Hub, Theater B \n Demo Session – Also Recorded (DEM549) \n \n Use Azure SRE Agent to automate tasks and increase site reliability \n https://build.microsoft.com/en-US/sessions/DEM550 \n Tuesday, May 20 th 5:10 PM - 5:25 PM Pacific Daylight Time \n Arch, 705 Pike, Level 4, Hub, Theater A \n Demo Session – Also Recorded (DEM550) \n \n How .NET Aspire on App Service enhances modern app development \n https://build.microsoft.com/en-US/sessions/DEM548 \n Wednesday, May 21 st 2:00 PM - 2:15 PM Pacific Daylight Time \n Arch, 705 Pike, Level 4, Hub, Theater B \n Demo Session – Also Recorded (DEM548) \n \n Add AI experiences to existing .NET apps using Sidecars in App Service \n [Note: Lab participants will be able to try Phi-4 and Azure AI Foundry Agent service scenarios in this lab.] \n https://build.microsoft.com/en-US/sessions/LAB347 \n Monday, May 19 th 4:45 PM - 6:00 PM Pacific Daylight Time \n Arch, 800 Pike, Level 1, Yakima 1 \n Hands on Lab – In-Person Only (LAB347) \n You can also work through the lab with your own Azure subscription! Code is available at https://github.com/Azure-Samples/Build2025-LAB347. Deploy the lab resources using the included resource provisioning template (https://github.com/Azure-Samples/Build2025-LAB347/blob/main/resources/lab347.json). You can deploy the template by searching on “Deploy a custom template” in the Azure Portal, and copying and pasting the template into the “Build your own template in the editor option”! \n \n Add AI experiences to existing .NET apps using Sidecars in App Service \n [Note: Lab participants will be able to try Phi-4 and Azure AI Foundry Agent service scenarios in this lab.] \n https://build.microsoft.com/en-US/sessions/LAB347-R1 \n Wednesday, May 21 st 4:30 PM - 5:45 PM Pacific Daylight Time \n Arch, 800 Pike, Lower Level, Skagit 5 \n Hands on Lab – In-Person Only (LAB347-R1) \n You can also work through the lab with your own Azure subscription! Code is available at https://github.com/Azure-Samples/Build2025-LAB347. Deploy the lab resources using the included resource provisioning template (https://github.com/Azure-Samples/Build2025-LAB347/blob/main/resources/lab347.json). You can deploy the template by searching on “Deploy a custom template” in the Azure Portal, and copying and pasting the template into the “Build your own template in the editor option”! \n \n Modernizing .NET Applications using Azure Migrate and GitHub Copilot \n https://build.microsoft.com/en-US/sessions/LAB343 \n Tuesday, May 20 th 5:15 PM - 6:30 PM Pacific Daylight Time \n Arch, 800 Pike, Level 1, Yakima 1 \n Hands on Lab – In-Person Only (LAB343) \n \n Modernizing .NET Applications using Azure Migrate and GitHub Copilot \n https://build.microsoft.com/en-US/sessions/LAB343-R1 \n Thursday, May 22 nd 10:15 AM – 11:30 AM Pacific Daylight Time \n Arch, 800 Pike, Level 2, Chelan 2 \n Hands on Lab – In-Person Only (LAB343-R1) ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"19295","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUtQYVZwbg?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTBKSTVDdw?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LXBNRHpBVg?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LW5mcWtOag?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LVF6TjF4cQ?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LUhLMk9UQg?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWNPNHJBQg?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LWZjcnhmbg?revision=60\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEyNDY1LTVqYVRIQQ?revision=60\"}"}}],"totalCount":9,"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/bS00NDEyNDY1LUtQYVZwbg?revision=60"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4414743":{"__typename":"Conversation","id":"conversation:4414743","topic":{"__typename":"BlogTopicMessage","uid":4414743},"lastPostingActivityTime":"2025-05-20T14:53:43.478-07:00","solved":false},"User:user:2481733":{"__typename":"User","uid":2481733,"login":"Mike_Hulme","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yNDgxNzMzLTU4MzU2MWlFNzAzQzhGRDUzOUU1NEUz"},"id":"user:2481733"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzQzLWdXVlFvTQ?revision=12\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzQzLWdXVlFvTQ?revision=12","title":"Blog graphic.jpg","associationType":"COVER","width":1280,"height":720,"altText":""},"BlogTopicMessage:message:4414743":{"__typename":"BlogTopicMessage","subject":"Building the Agentic Future","conversation":{"__ref":"Conversation:conversation:4414743"},"id":"message:4414743","revisionNum":12,"uid":4414743,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:2481733"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":1436},"postTime":"2025-05-19T09:00:00.097-07:00","lastPublishTime":"2025-05-20T14:53:43.478-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" As a business built by developers, for developers, Microsoft has spent decades making it faster, easier and more exciting to create great software. And developers everywhere have turned everything from BASIC and the .NET Framework, to Azure, VS Code, GitHub and more into the digital world we all live in today. But nothing compares to what’s on the horizon as agentic AI redefines both how we build and the apps we’re building. In fact, the promise of agentic AI is so strong that market forecasts predict we’re on track to reach 1.3 billion AI Agents by 2028. \n Our own data, from 1,500 organizations around the world, shows agent capabilities have jumped as a driver for AI applications from near last to a top three priority when comparing deployments earlier this year to applications being defined today. Of those organizations building AI agents, 41% chose Microsoft to build and run their solutions, significantly more than any other vendor. \n But within software development the opportunity is even greater, with approximately 50% of businesses intending to incorporate agentic AI into software engineering this year alone. \n Developers face a fascinating yet challenging world of complex agent workflows, a constant pipeline of new models, new security and governance requirements, and the continued pressure to deliver value from AI, fast, all while contending with decades of legacy applications and technical debt. \n This week at Microsoft Build, you can see how we’re making this future a reality with new AI-native developer practices and experiences, by extending the value of AI across the entire software lifecycle, and by bringing critical AI, data, and toolchain services directly to the hands of developers, in the most popular developer tools in the world. \n Agentic DevOps \n AI has already transformed the way we code, with 15 million developers using GitHub Copilot today to build faster. But coding is only a fraction of the developer’s time. Extending agents across the entire software lifecycle, means developers can move faster from idea to production, boost code quality, and strengthen security, while removing the burden of low value, routine, time consuming tasks. We can even address decades of technical debt and keep apps running smoothly in production. \n This is the foundation of agentic DevOps—the next evolution of DevOps, reimagined for a world where intelligent agents collaborate with developer teams and with each other. Agents introduced today across GitHub Copilot and Azure operate like a member of your development team, automating and optimizing every stage of the software lifecycle, from performing code reviews, and writing tests to fixing defects and building entire specs. Copilot can even collaborate with other agents to complete complex tasks like resolving production issues. Developers stay at the center of innovation, orchestrating agents for the mundane while focusing their energy on the work that matters most. \n Customers like EY are already seeing the impact: \n “The coding agent in GitHub Copilot is opening up doors for each developer to have their own team, all working in parallel to amplify their work. Now we're able to assign tasks that would typically detract from deeper, more complex work, freeing up several hours for focus time.\" - James Zabinski, DevEx Lead at EY \n You can learn more about agentic DevOps and the new capabilities announced today from Amanda Silver, Corporate Vice President of Product, Microsoft Developer Division, and Mario Rodriguez, Chief Product Office at GitHub. And be sure to read more from GitHub CEO Thomas Dohmke about the latest with GitHub Copilot. \n At Microsoft Build, see agentic DevOps in action in the following sessions, available both in-person May 19 - 22 in Seattle and on-demand: \n \n BRK100: Reimagining Software Development and DevOps with Agentic AI \n BRK 113: The Agent Awakens: Collaborative Development with GitHub Copilot \n BRK118: Accelerate Azure Development with GitHub Copilot, VS Code & AI \n BRK131: Java App Modernization Simplified with AI \n BRK102: Agent Mode in Action: AI Coding with Vibe and Spec-Driven Flows \n BRK101: The Future of .NET App Modernization Streamlined with AI \n \n New AI Toolchain Integrations \n Beyond these new agentic capabilities, we’re also releasing new integrations that bring key services directly to the tools developers are already using. From the 150 million GitHub users to the 50 million monthly users of the VS Code family, we’re making it easier for developers everywhere to build AI apps. \n If GitHub Copilot changed how we write code, Azure AI Foundry is changing what we can build. And the combination of the two is incredibly powerful. Now we’re bringing leading models from Azure AI Foundry directly into your GitHub experience and workflow, with a new native integration. GitHub models lets you experiment with leading models from OpenAI, Meta, Cohere, Microsoft, Mistral and more. Test and compare performance while building models directly into your codebase all within in GitHub. You can easily select the best model performance and price side by side and swap models with a simple, unified API. And keeping with our enterprise commitment, teams can set guardrails so model selection is secure, responsible, and in line with your team’s policies. \n Meanwhile, new Azure Native Integrations gives developers seamless access to a curated set of 20 software services from DataDog, New Relic, Pinecone, Pure Storage Cloud and more, directly through Azure portal, SDK, and CLI. With Azure Native Integrations, developers get the flexibility to work with their preferred vendors across the AI toolchain with simplified single sign-on and management, while staying in Azure. Today, we are pleased to announce the addition of even more developer services: \n \n Arize AI: Arize’s platform provides essential tooling for AI and agent evaluation, experimentation, and observability at scale. With Arize, developers can easily optimize AI applications through tools for tracing, prompt engineering, dataset curation, and automated evaluations. Learn more. \n LambdaTest HyperExecute: LambdaTest HyperExecute is an AI-native test execution platform designed to accelerate software testing. It enables developers and testers to run tests up to 70% faster than traditional cloud grids by optimizing test orchestration, observability and streamlining TestOps to expedite release cycles. Learn more. \n Mistral: Mistral and Microsoft announced a partnership today, which includes integrating Mistral La Plateforme as part of Azure Native Integrations. Mistral La Plateforme provides pay-as-you-go API access to Mistral AI's latest large language models for text generation, embeddings, and function calling. Developers can use this AI platform to build AI-powered applications with retrieval-augmented generation (RAG), fine-tune models for domain-specific tasks, and integrate AI agents into enterprise workflows. \n MongoDB (Public Preview): MongoDB Atlas is a fully managed cloud database that provides scalability, security, and multi-cloud support for modern applications. Developers can use it to store and search vector embeddings, implement retrieval-augmented generation (RAG), and build AI-powered search and recommendation systems. Learn more. \n Neon: Neon Serverless Postgres is a fully managed, autoscaling PostgreSQL database designed for instant provisioning, cost efficiency, and AI-native workloads. Developers can use it to rapidly spin up databases for AI agents, store vector embeddings with pgvector, and scale AI applications seamlessly. Learn more. \n \n Java and .Net App Modernization \n Shipping to production isn’t the finish line—and maintaining legacy code shouldn’t slow you down. Today we’re announcing comprehensive resources to help you successfully plan and execute app modernization initiatives, along with new agents in GitHub Copilot to help you modernize at scale, in a fraction of the time. \n In fact, customers like Ford China are seeing breakthrough results, reducing up to 70% of their Java migration efforts by using GitHub Copilot to automate middleware code migration tasks. \n Microsoft’s App Modernization Guidance applies decades of enterprise apps experience to help you analyze production apps and prioritize modernization efforts, while applying best practices and technical patterns to ensure success. And now GitHub Copilot transforms the modernization process, handling code assessments, dependency updates, and remediation across your production Java and .NET apps (support for mainframe environments is coming soon!). It generates and executes update plans automatically, while giving you full visibility, control, and a clear summary of changes. You can even raise modernization tasks in GitHub Issues from our proven service Azure Migrate to assign to developer teams. Your apps are more secure, maintainable, and cost-efficient, faster than ever. \n Learn how we’re reimagining app modernization for the era of AI with the new App Modernization Guidance and the modernization agent in GitHub Copilot to help you modernize your complete app estate. \n Scaling AI Apps and Agents \n Sophisticated apps and agents need an equally powerful runtime. And today we’re advancing our complete portfolio, from serverless with Azure Functions and Azure Container Apps, to the control and scale of Azure Kubernetes Service. At Build we’re simplifying how you deploy, test, and operate open-source and custom models on Kubernetes through Kubernetes AI Toolchain Operator (KAITO), making it easy to inference AI models with the flexibility, auto-scaling, pay-per-second pricing, and governance of Azure Container Apps serverless GPU, helping you create real-time, event-driven workflows for AI agents by integrating Azure Functions with Azure AI Foundry Agent Service, and much, much more. The platform you choose to scale your apps has never been more important. With new integrations with Azure AI Foundry, advanced automation that reduces developer overhead, and simplified operations, security and governance, Azure’s app platform can help you deliver the sophisticated, secure AI apps your business demands. \n To see the full slate of innovations across the app platform, check out: Powering the Next Generation of AI Apps and Agents on the Azure Application Platform \n Tools that keep pace with how you need to build \n This week we’re also introducing new enhancements to our tooling to help you build as fast as possible and explore what’s next with AI, all directly from your editor. GitHub Copilot for Azure brings Azure-specific tools into agent mode in VS Code, keeping you in the flow as you create, manage, and troubleshoot cloud apps. Meanwhile the Azure Tools for VS Code extension pack brings everything you need to build apps on Azure using GitHub Copilot to VS Code, making it easy to discover and interact with cloud services that power your applications. \n Microsoft’s gallery of AI App Templates continues to expand, helping you rapidly move from concept to production app, deployed on Azure. Each template includes fully working applications, complete with app code, AI features, infrastructure as code (IaC), configurable CI/CD pipelines with GitHub Actions, along with an application architecture, ready to deploy to Azure. These templates reflect the most common patterns and use cases we see across our AI customers, from getting started with AI agents to building GenAI chat experiences with your enterprise data and helping you learn how to use best practices such as keyless authentication. \n Learn more by reading the latest on Build Apps and Agents with Visual Studio Code and Azure \n Building the agentic future \n The emergence of agentic DevOps, the new wave of development powered by GitHub Copilot and new services launching across Microsoft Build will be transformative. But just as we’ve seen over the first 50 years of Microsoft’s history, the real impact will come from the global community of developers. You all have the power to turn these tools and platforms into advanced AI apps and agents that make every business move faster, operate more intelligently and innovate in ways that were previously impossible. \n Learn more and get started with GitHub Copilot \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"12343","kudosSumWeight":2,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzQzLWdXVlFvTQ?revision=12\"}"}}],"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/bS00NDE0NzQzLWdXVlFvTQ?revision=12"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4414755":{"__typename":"Conversation","id":"conversation:4414755","topic":{"__typename":"BlogTopicMessage","uid":4414755},"lastPostingActivityTime":"2025-05-20T07:47:11.375-07:00","solved":false},"User:user:84225":{"__typename":"User","uid":84225,"login":"NagaSurendran","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS04NDIyNS12RU11Q2o?image-coordinates=127%2C0%2C1792%2C1664"},"id":"user:84225"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzU1LUZNNXVPSQ?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzU1LUZNNXVPSQ?revision=18","title":"Build blog.png","associationType":"COVER","width":1280,"height":720,"altText":""},"BlogTopicMessage:message:4414755":{"__typename":"BlogTopicMessage","subject":"Powering the Next Generation of AI Apps and Agents on the Azure Application Platform","conversation":{"__ref":"Conversation:conversation:4414755"},"id":"message:4414755","revisionNum":18,"uid":4414755,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:84225"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":1221},"postTime":"2025-05-19T09:37:35.345-07:00","lastPublishTime":"2025-05-20T07:47:11.375-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Generative AI is already transforming how businesses operate, with organizations seeing an average return of 3.7x for every $1 of investment [The Business Opportunity of AI, IDC study commissioned by Microsoft]. Developers sit at the center of this transformation, and their need for speed, flexibility, and familiarity with existing tools is driving the demand for application platforms that integrate AI seamlessly into their current development workflows. \n To fully realize the potential of generative AI in applications, organizations must provide developers with frictionless access to AI models, frameworks, and environments that enable them to scale AI applications. We see this in action at organizations like Accenture, Assembly Software, Carvana, Coldplay (Pixel Lab), Global Travel Collection, Fujitsu, healow, Heineken, Indiana Pacers, NFL Combine, Office Depot, Terra Mater Studios (Red Bull), and Writesonic. \n Today, we’re excited to announce new innovations across the Azure Application Platform to meet developers where they are and help enterprises accelerate their AI transformation. The Azure App Platform offers managed Kubernetes (Azure Kubernetes Service), serverless (Azure Container Apps and Azure Functions), PaaS (Azure App Service) and integration (Azure Logic Apps and API Management). Whether you’re modernizing existing applications or creating new AI apps and agents, Azure provides a developer‑centric App Platform—seamlessly integrated with Visual Studio, GitHub, and Azure AI Foundry—and backed by a broad portfolio of fully managed databases, from Azure Cosmos DB to Azure Database for PostgreSQL and Azure SQL Database. \n Innovate faster with AI apps and agents \n In today’s fast-evolving AI landscape, the key to staying competitive is being able to move from AI experimentation to production quickly and easily. Whether you’re deploying open-source AI models or integrating with any of the 1900+ models in Azure AI Foundry, the Azure App Platform provides a streamlined path for building and scaling AI apps and agents. \n Kubernetes AI Toolchain Operator (KAITO) for AKS add-on (GA) and Azure Arc extension (preview) simplifies deploying, testing, and operating open-source and custom models on Kubernetes. Automated GPU provisioning, pre-configured settings, workspace customization, real-time deployment tracking, and built-in testing interfaces significantly reduce infrastructure overhead and accelerate AI development. Visual Studio Code integration enables developers to quickly prototype, deploy, and manage models. Learn more. \n Serverless GPU integration with AI Foundry Models (preview) offers a new deployment target for easy AI model inferencing. Azure Container Apps serverless GPU offers unparalleled flexibility to run any supported model. It features automatic scaling, pay-per-second pricing, robust data governance, and built-in enterprise networking and security support, making it an ideal solution for scalable and secure AI deployments. Learn more. \n Azure Functions integration with AI Foundry Agent Service (GA) enables you to create real-time, event-driven workflows for AI agents without managing infrastructure. This integration enables agents to securely invoke Azure Functions to execute business logic, access systems, or process data on demand. It unlocks scalable, cost-efficient automation for intelligent applications that respond dynamically to user input or events. Learn more. \n Azure Functions enriches Azure OpenAI extension (preview) to automate embeddings for real-time RAG, semantic search, and function calling with built-in support for AI Search, Azure Cosmos DB for MongoDB and Azure Data Explorer vector stores. Learn more. \n Azure Functions MCP extension adds support for instructions and monitoring (preview) making it easier to build and operate remote MCP servers at cloud scale. With this update, developers can deliver richer AI interactions by providing capabilities and context to large language models directly from Azure Functions. This enables AI agents to both call functions and respond intelligently with no separate orchestration layer required. Learn more. \n Harnessing AI to drive intelligent business processes \n As AI continues to grow in adoption, its ability to automate complex business process workflows becomes increasingly valuable. Azure Logic Apps empowers organizations to build, orchestrate, and monitor intelligent, agent-driven workflows. \n Logic Apps agent loop orchestrates agentic business processes (preview) with goal-based automation using AI-powered reasoning engines such as OpenAI’s GPT-4o or GPT-4.1. Instead of building fixed flows, users can define the desired outcomes, and Agent loop action in Logic Apps figures out the steps dynamically. With 1400+ out-of-the-box connectors to various enterprise systems and SaaS applications, and full observability, Logic Apps enables you to rapidly deliver on all business process needs with agentic automation. Learn more. \n Enable intelligent data pipelines for RAG using Logic Apps (preview) with new native integrations with Azure Cosmos DB and Azure AI Search. Teams can ingest content into vector stores and databases through low-code templates. No custom code required. This enables AI agents to ground responses in proprietary data, improving relevance and accuracy for real business outcomes. Learn more. \n Empower AI agents to act with Logic Apps in AI Foundry (preview) across enterprise systems using low-code automation. Prebuilt connectors and templates simplify integration with Microsoft and third-party services from databases to SaaS apps. This gives developers and business users a faster way to orchestrate intelligent actions, automate complex workflows, and operationalize AI across the organization. Learn more. \n Scale AI innovation across your enterprise \n As AI adoption grows, so does the need for visibility and control over how models are accessed and utilized. Azure API Management helps you achieve this with advanced tools that ensure governance, security, and efficient management of your AI APIs. \n Expanded AI Gateway capabilities in Azure API Management (GA) give organizations deeper control, observability, and governance for generative AI workloads. Key additions include LLM Logging for prompts, completions, and token usage insights; session-aware load balancing to maintain context in multi-turn chats; robust guardrails through integration with Azure AI Content Safety service, and direct onboarding of models from Azure AI Foundry. Customers can also now apply GenAI-specific policies to AWS Bedrock model endpoints, enabling unified governance across multi-cloud environments. Learn more. \n Azure API Management support for Model Context Protocol (preview) makes it easy to expose existing APIs as secure, agent-compatible endpoints. You can apply gateway policies such as authentication, rate limiting, caching, and authorization to protect MCP servers. This ensures consistent, centralized policy enforcement across all your MCP-enabled APIs. With minimal effort, you can transform APIs into AI-ready services that integrate seamlessly with autonomous agents. Learn more. \n Azure API Center introduces private MCP registry and streamlined discovery (preview) giving organizations full control over which services are discoverable. Role-Based Access Control (RBAC) allows teams to manage who can find, use, and update MCP servers based on organizational roles. Developers can now discover and consume MCP-enabled APIs directly through the API Center portal. These updates improve governance and simplify developer experience for AI agent development. Learn more. \n Simplify operations for AI apps and agents in production \n Moving AI applications from proof-of-concept to production requires an environment that scales securely, cost-effectively, and reliably. The Azure App Platform continues to evolve with enhancements that remove operational friction, so you can deploy your AI apps, agents and scale with confidence. \n App Service Premium v4 Plan (preview) delivers up to 25% better performance and up to 24% cost savings over the previous generation—ideal for scalable, secure web apps. App Service Premium v4 helps modernize both Windows and Linux applications with better performance, security, and DevOps integration. It now offers a more cost-effective solution for customers seeking a fully managed PaaS, reducing infrastructure overhead while supporting today’s demanding AI applications. Learn more. \n AKS security dashboard (GA) provides unified visibility and automated remediation powered by Microsoft Defender for Containers—helping operations stay ahead of threats and compliance needs without leaving the Azure portal. Learn more. \n AKS Long-Term Support (GA) introduces 2-year support for all versions of Kubernetes after 1.27, in addition to the standard community-supported versions. This extended support model enables teams to reduce upgrade frequency and complexity, ensure platform stability, and provide greater operational flexibility. Learn more. \n Dynamic service recommendations for AKS (preview) streamlines the process of selecting and connecting services to your Azure Kubernetes Service cluster by offering tailored Azure service recommendations directly in the Azure portal. It uses in-portal intelligence to suggest the right services based on your usage patterns, making it easier to choose what’s best for your workloads. Learn more. \n Azure Functions Flex Consumption adds support for availability zones and smaller instance sizes (preview) to improve reliability and resiliency for critical workloads. The new 512 MB memory option helps customers fine-tune resource usage and reduce costs for lightweight functions. These updates are available in Australia East, East Asia, Sweden Central, and UK South, and can be enabled on both new and existing Flex Consumption apps. Learn more. \n Join us at Microsoft Build, May 19-22 \n The future of AI applications is here, and it’s powered by Azure. From APIs to automation, from web apps to Kubernetes, and from cloud to edge, we’re building the foundation for the next era of intelligent software. Whether you're modernizing existing systems or pioneering the next big thing in AI, Azure gives you the tools, performance, and governance to build boldly. Our platform innovations are designed to simplify your path, remove operational friction, and help you scale with confidence. \n Explore the various breakout, demo and lab sessions at Microsoft Build, May 19-22, to dive deeper into these Azure App Platform innovations. We can’t wait to see what you will build next! ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"10701","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzU1LUZNNXVPSQ?revision=18\"}"}}],"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/bS00NDE0NzU1LUZNNXVPSQ?revision=18"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4414763":{"__typename":"Conversation","id":"conversation:4414763","topic":{"__typename":"BlogTopicMessage","uid":4414763},"lastPostingActivityTime":"2025-05-20T05:00:00.019-07:00","solved":false},"User:user:888651":{"__typename":"User","uid":888651,"login":"Asir-Selvasingh","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS04ODg2NTEtMjQ3Njk3aTk0OTBCQTQ4QTBENkE0OUY"},"id":"user:888651"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLXVHbzVqVg?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLXVHbzVqVg?revision=6","title":"Spring AI and Azure - 1300x500.jpg","associationType":"COVER","width":5417,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLTBSQW9UZg?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLTBSQW9UZg?revision=6","title":"start.spring.io-screenshot.jpg","associationType":"BODY","width":3840,"height":2160,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLThzVU92OQ?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLThzVU92OQ?revision=6","title":"Build-Enterprise-Agents-with-Java-and-Spring.jpg","associationType":"BODY","width":8001,"height":4501,"altText":""},"BlogTopicMessage:message:4414763":{"__typename":"BlogTopicMessage","subject":"Spring AI 1.0 GA is Here - Build Java AI Apps End-to-End on Azure Today","conversation":{"__ref":"Conversation:conversation:4414763"},"id":"message:4414763","revisionNum":6,"uid":4414763,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:888651"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":795},"postTime":"2025-05-20T05:00:00.019-07:00","lastPublishTime":"2025-05-20T05:00:00.019-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Spring AI 1.0 is now generally available, and it is ready to help Java developers bring the power of AI into their Spring Boot applications. This release is the result of open collaboration and contributions across the Spring and Microsoft Azure engineering teams. Together, they have made it simple for Java developers to integrate LLMs, vector search, memory, and agentic workflows using the patterns they already know. \n Why This Matters for Java Developers? \n Spring AI 1.0, built and maintained by the Spring team at Broadcom with active contributions from Microsoft Azure, delivers an intuitive and powerful foundation for building intelligent apps. You can plug AI into existing Spring Boot apps with minimal friction, using starters and conventions familiar to every Spring developer. Whether you are building new intelligent features or exploring AI use cases, Spring AI and Azure have you covered. \n Azure - The Complete AI Stack for Java Developers \n Azure offers every essential component needed to build intelligent Java applications. At the core of this offering is Azure AI Foundry, which provides a unified platform for enterprise AI operations, model builders, and application development. With AI Foundry, Java developers do not need to train or fine-tune models. They can deploy foundation models themselves, interact with already deployed foundation models, or connect to models deployed by their AI engineers or data/ML engineers. Developers can connect to these deployed models, test prompt templates, inspect token usage and latency metrics, and embed model interactions directly into their Spring Boot applications. This platform combines production-grade infrastructure with user-friendly tools, helping developers operate AI-powered applications with confidence. \n Here is how each piece fits into your Spring development workflow: \n \n Model-as-a-Service – Use Azure OpenAI for hosted large language models or choose from models available in Azure AI model inference, including offerings from Meta, Mistral AI, and DeepSeek. These models can be accessed directly using Spring AI starters, allowing your app to summarize, answer, generate, or assist through a simple, declarative API. \n Vector Databases – Embeddings and vector similarity are essential for semantic search and RAG. Azure provides multiple options: Cosmos DB with vector search support, Azure AI Search for advanced indexing and reranking, PostgreSQL with pgvector for SQL-based access, or Redis for in-memory speed. Spring AI integrates with these options to retrieve relevant context dynamically. \n Relational Databases – Use familiar relational databases like Azure SQL Database, PostgreSQL, and MySQL for structured data and transactional workloads. These remain the backbone for business logic, customer data, and system state that complement AI-generated content. \n Chat Memory – Track conversations across multiple turns using memory stores. Cosmos DB and Redis can persist chat memory, enabling your Spring-based agents to retain history, manage context, and respond in a more personalized way. \n RAG Workflows – Retrieval-Augmented Generation allows models to respond using external knowledge. Spring AI provides out-of-the-box support for RAG using vector stores and document loaders, enabling Java developers to build grounded, trustworthy interactions with minimal boilerplate. \n Orchestration with MCP – Build intelligent agents that call functions, retrieve data, and reason across steps. With Model Context Protocol (MCP) support, Spring AI apps can integrate seamlessly with external toolchains and invoke capabilities across multiple services. The MCP Java SDK is available through Spring Boot starters, simplifying the creation of both MCP Servers and Clients. \n App, AI Agent or MCP Server Deployment – Run your Spring AI applications, AI agents, and MCP servers on your choice of Azure compute: Azure App Service for managed deployments, AKS for containerized microservices, Azure Container Apps for serverless scale-out, or Virtual Machines for full control. Spring Boot simplifies packaging and deployment across these environments. \n \n In addition to deploying applications built with Spring AI, you can deploy any MCP Server - regardless of the language stack - to Azure and interoperate with it using MCP Clients built with Spring AI. This ensures that Java developers can connect and collaborate with agents and services written by other teams using different technology stacks. \n Whether you are deploying an AI-powered web app, a backend intelligence service, or a full agentic workflow across services, Azure provides the flexibility, scalability, and operational reliability you need. \n Fundamentals for Enterprise-Grade AI Applications \n In production, AI features must align with enterprise requirements like security, reliability, and explainability. Here is how Spring AI and Azure together deliver on these needs: \n \n Security and Access Control – Ensure AI features respect role-based access policies. Use keyless or passwordless authentication for Spring Boot apps accessing Azure OpenAI, PostgreSQL + pgvector, Cosmos DB, and connections to Azure SQL, PostgreSQL, and MySQL – using managed identities and Entra ID. Integrate identity with Microsoft Entra ID and protect secrets using Azure Key Vault. Spring Security helps you enforce user-scoped interactions. \n Safety and Compliance – Use content filtering, prompt injection protection, and policy alignment to control model behavior. Azure OpenAI includes built-in safety filters. Combined with Spring AI’s prompt templates, you can enforce structured, policy-compliant interactions. \n Observability – Monitor model usage, token consumption, latency, and errors. Spring Boot Actuator and Micrometer provide metrics out-of-the-box. You can export these metrics to Azure Monitor and Application Insights for full-stack visibility. \n Structured Outputs – Use JSON or XML formats when integrating AI responses into downstream systems. Spring AI supports output parsing and schema validation, so generated content can drive actions within your application without post-processing. \n Reasoning and Explainability – Let applications show sources, highlight references, or explain decision flows. In domains like healthcare or finance, this transparency builds trust. Spring AI supports tool calling and multi-step workflows that help models reason and communicate clearly. \n \n Tools, Demos and Learning Paths \n \n As always, you can start at start.spring.io, the easiest place to start any Spring Boot project, to quickly generate your app project using Spring AI, Web and Azure starters like OpenAI, AI Search, Cosmos DB, PostgreSQL + pgvector, relational databases, and Redis. \n \n \n \n End-to-End Demo – watch a hands-on demo of building enterprise AI agents with Java, Spring, and MCP. \n \n \n \n Get Started Today! \n \n \n Resources: Azure QuickStart using Spring AI and Spring AI resources \n \n \n Azure QuickStart using Spring AI \n \n o Chat \n o Use Your Data \n o Completions \n \n Spring AI \n \n o Spring AI Project \n o Spring AI Documentation \n o Spring AI Examples \n \n Collaboration and Contributions \n This GA release of Spring AI reflects the combined engineering and open-source commitment of Broadcom and Microsoft. Special thanks to Adib Saikali, Mark Pollack, Christian Tzolov, Dariusz Jędrzejczyk, Josh Long, Dan Vega, DaShaun Carter, Asir Selvasingh, Theo van Kraay, Mark Heckler, Matt Gotteiner, Govind Kamtamneni, Jorge Balderas, Brendan Mitchell, and Karl Erickson for their leadership, code, documentation, guidance, and community focus. \n Get Started Today! \n Everything you need is ready. Build your next AI-powered Java app with Spring AI and Azure. \n Begin your journey here: aka.ms/spring-ai ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"7874","kudosSumWeight":5,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLXVHbzVqVg?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLTBSQW9UZg?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzYzLThzVU92OQ?revision=6\"}"}}],"totalCount":3,"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/bS00NDE0NzYzLXVHbzVqVg?revision=6"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4413965":{"__typename":"Conversation","id":"conversation:4413965","topic":{"__typename":"BlogTopicMessage","uid":4413965},"lastPostingActivityTime":"2025-05-20T00:10:52.622-07:00","solved":false},"User:user:804504":{"__typename":"User","uid":804504,"login":"Haixia_Cheng","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS04MDQ1MDQtemJzSUFj?image-coordinates=0%2C0%2C460%2C460"},"id":"user:804504"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEzOTY1LWNCeFB4cA?revision=26\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEzOTY1LWNCeFB4cA?revision=26","title":"image.png","associationType":"BODY","width":1300,"height":394,"altText":""},"BlogTopicMessage:message:4413965":{"__typename":"BlogTopicMessage","subject":"Configure health probes for Quarkus Apps on Azure Container Apps","conversation":{"__ref":"Conversation:conversation:4413965"},"id":"message:4413965","revisionNum":26,"uid":4413965,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:804504"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Shows how to Configure health probes for Quarkus Apps on Azure Container Apps.","metrics":{"__typename":"MessageMetrics","views":240},"postTime":"2025-05-20T00:10:52.622-07:00","lastPublishTime":"2025-05-20T00:10:52.622-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Overview \n This blog post shows you how to enable SmallRye Health in Quarkus applications with health probes in Azure Container Apps. The techniques shown in this blog post show you how to effectively monitor the health and status of your Quarkus instances. The application is a \"to do list\" with a JavaScript front end and a REST endpoint. Azure Database for PostgreSQL Flexible Server provides the persistence layer for the app. The app uses SmallRye Health to expose application health to Azure Container Apps. \n The Quarkus SmallRye Health extension provides the following REST endpoints: \n \n /q/health/live: Indicates that the application is up and running. \n /q/health/ready: Indicates that the application is ready to accept requests. \n /q/health/started: Indicates that the application starts successfully. \n /q/health: Aggregates all health check results for the application. \n \n Azure Container Apps supports three types of health probes to regularly monitor the status of containerized applications: \n \n Liveness Probes: Identify when to restart an application. \n Readiness Probes: Check if an app instance is ready to accept traffic. \n Startup Probes: Confirm when an application completes startup. \n \n This blog post outlines how to configure health probes on Azure Container Apps to monitor and manage Quarkus application instances. \n Prerequisites \n \n An Azure subscription. If you don't have an Azure subscription, create a free account before you begin. \n Prepare a local machine with Unix-like operating system installed - for example, Ubuntu, macOS, or Windows Subsystem for Linux. \n Install a Java SE implementation version 17 - for example, Microsoft build of OpenJDK. \n Install Git. \n Install Maven, version 3.9.8 or higher. \n Install Docker or Podman for your OS. \n Install the Azure CLI to run Azure CLI commands.\n \n Sign in to the Azure CLI by using the az login command. To finish the authentication process, follow the steps displayed in your terminal. For other sign-in options, see Sign into Azure with Azure CLI. \n When you're prompted, install the Azure CLI extension on first use. For more information about extensions, see Use and manage extensions with the Azure CLI. \n Run az version to find the version and dependent libraries that are installed. To upgrade to the latest version, run az upgrade. This blog post requires at least version 2.65.0 of Azure CLI. \n \n \n \n Prepare the Quarkus app \n Use the following command to clone the sample Java project for this article. The sample is on GitHub. \n git clone https://github.com/Azure-Samples/quarkus-azure\ncd quarkus-azure\ngit checkout 2025-05-16\ncd aca-quarkus-healthcheck \n Health check \n The sample application has enabled smallrye-health extension in pom.xml. \n <dependency>\n <groupId>io.quarkus</groupId>\n <artifactId>quarkus-smallrye-health</artifactId>\n</dependency> \n The following sections show how the health, startup, and readiness checks can easily be implemented in Quarkus. \n Liveness: \n The LivenessCheck class is a custom health check implementation. It's annotated with @Liveness and @ApplicationScoped to signify its role in monitoring the application's liveness. \n The call method retrieves memory usage statistics using the MemoryMXBean and determines the application's health based on whether the used heap memory is below 90% of the maximum available memory. If this condition is met, the health check returns a status of \"healthy\"; otherwise, it indicates an issue. \n This helps cloud environments decide if the application instance should be restarted. You can find more usage examples MicroProfile Health Example. \n cat src/main/java/io/quarkus/sample/health/LivenessCheck.java package io.quarkus.sample.health;\n\nimport java.lang.management.ManagementFactory;\nimport java.lang.management.MemoryMXBean;\n\nimport jakarta.enterprise.context.ApplicationScoped;\nimport org.eclipse.microprofile.health.Liveness;\nimport org.eclipse.microprofile.health.HealthCheck;\nimport org.eclipse.microprofile.health.HealthCheckResponse;\n\nimport io.quarkus.sample.TodoResource;\n\n@Liveness\n@ApplicationScoped\npublic class LivenessCheck implements HealthCheck {\n\n @Override\n public HealthCheckResponse call() {\n MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();\n long memUsed = memBean.getHeapMemoryUsage().getUsed();\n long memMax = memBean.getHeapMemoryUsage().getMax();\n\n return HealthCheckResponse.named(\n TodoResource.class.getSimpleName() + \" Liveness Check\")\n .status(memUsed < memMax * 0.9).build();\n }\n} \n \n StartUp: \n The StartupCheck class is a custom health check, annotated with @Startup to indicate it monitors the application's startup status. It's also marked as @ApplicationScoped for its lifecycle scope. \n The call method uses the OperatingSystemMXBean to check the system's CPU load. It calculates the current CPU usage and evaluates whether it remains below 95%. If this condition is satisfied, the application starts successfully and is in a healthy state; otherwise, it indicates a potential issue during startup. \n This check helps cloud environments verify whether the application successfully starts. \n cat src/main/java/io/quarkus/sample/health/StartupCheck.java package io.quarkus.sample.health;\n\nimport java.lang.management.ManagementFactory;\nimport com.sun.management.OperatingSystemMXBean;\nimport jakarta.enterprise.context.ApplicationScoped;\nimport org.eclipse.microprofile.health.Startup;\nimport org.eclipse.microprofile.health.HealthCheck;\nimport org.eclipse.microprofile.health.HealthCheckResponse;\n\nimport io.quarkus.sample.TodoResource;\n\n@Startup\n@ApplicationScoped\npublic class StartupCheck implements HealthCheck {\n\n @Override\n public HealthCheckResponse call() {\n OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean)\n ManagementFactory.getOperatingSystemMXBean();\n double cpuUsed = bean.getCpuLoad();\n return HealthCheckResponse.named(TodoResource.class\n .getSimpleName() + \" Startup Check\")\n .status(cpuUsed < 0.95).build();\n }\n} \n \n Readiness: \n The sample application uses a PostgreSQL database. Enabling smallrye-health automatically activates readiness health checks provided by the quarkus-agroal and reactive client extensions to validate the datasource. For more information, see Datasource health check. You can also implement your readiness checks by applying the annotation @Readiness in a similar fashion as the @Liveness and @Startup annotations shown in the preceding sections. \n cat src/main/java/io/quarkus/sample/health/ReadinessCheck.java package io.quarkus.sample.health;\n\nimport java.lang.management.ManagementFactory;\nimport java.lang.management.MemoryMXBean;\n\nimport org.eclipse.microprofile.health.HealthCheck;\nimport org.eclipse.microprofile.health.HealthCheckResponse;\nimport org.eclipse.microprofile.health.Readiness;\n\nimport jakarta.enterprise.context.ApplicationScoped;\n\nimport java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\nimport io.quarkus.sample.TodoResource;\n\n@Readiness\n@ApplicationScoped\npublic class ReadinessCheck implements HealthCheck {\n private static final String READINESS_CHECK = TodoResource.class.getSimpleName() + \" API reachable\";\n private static final String API_URL = \"http://localhost:8080/api\";\n\n private boolean isHealthy() {\n try {\n HttpClient client = HttpClient.newHttpClient();\n HttpRequest request = HttpRequest.newBuilder()\n .uri(URI.create(API_URL))\n .GET()\n .build();\n\n HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\n return response.statusCode() == 200;\n } catch (Exception e) {\n return false;\n }\n }\n\n @Override\n public HealthCheckResponse call() {\n return isHealthy() ? HealthCheckResponse.up(READINESS_CHECK) : HealthCheckResponse.down(READINESS_CHECK);\n }\n}\n \n Run the Quarkus app locally \n The steps in this section show you how to run the app locally. \n Quarkus supports the automatic provisioning of unconfigured services in development and test mode. Quarkus refers to this capability as dev services. Let's say you include a Quarkus feature, such as connecting to a database service. You want to test the app, but haven't yet fully configured the connection to a real database. Quarkus automatically starts a stub version of the relevant service and connects your application to it. For more information, see Dev Services Overview in the Quarkus documentation. \n Make sure your container environment, Docker or Podman, is running and use the following command to enter Quarkus dev mode: \n mvn clean package quarkus:dev \n You might be asked if you want to send telemetry of your usage of Quarkus dev mode. If so, answer as you like. \n Quarkus dev mode enables live reload with background compilation. If you modify any aspect of your app source code and refresh your browser, you can see the changes. If there are any issues with compilation or deployment, an error page lets you know. Quarkus dev mode listens for a debugger on port 5005. If you want to wait for the debugger to attach before running, pass -Dsuspend on the command line. If you don't want the debugger at all, you can use -Ddebug=false. \n The output should look like the following example: \n __ ____ __ _____ ___ __ ____ ______\n --/ __ \\/ / / / _ | / _ \\/ //_/ / / / __/\n -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\\ \\\n--\\___\\_\\____/_/ |_/_/|_/_/|_|\\____/___/\nINFO [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aca 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 14.826s. Listening on: http://localhost:8080\nINFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.\nINFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]\n\n--\nTests paused\nPress [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options> \n Press key w on the terminal where Quarkus dev mode is running. The w key opens your default web browser to show the Todo application. \n You can also access the application GUI at http://localhost:8080 directly. \n You can check the application's health status by visiting the URI http://localhost:8080/q/health. The following JSON response is an example: \n {\n \"status\": \"UP\",\n \"checks\": [\n {\n \"name\": \"TodoResource Liveness Check\",\n \"status\": \"UP\"\n },\n {\n \"name\": \"TodoResource API reachable\",\n \"status\": \"UP\"\n },\n {\n \"name\": \"Database connections health check\",\n \"status\": \"UP\",\n \"data\": {\n \"<default>\": \"UP\"\n }\n },\n {\n \"name\": \"TodoResource Startup Check\",\n \"status\": \"UP\"\n }\n ]\n} \n Additionally, a web-based GUI for health monitoring is available at http://localhost:8080/q/health-ui/, as shown in the following image: \n \n Press key q to exit Quarkus dev mode. \n Create the Azure resources \n The steps in this section show you how to create the following Azure resources to run the Quarkus sample app: \n \n Azure Database for PostgreSQL Flexible Server \n Azure Container Registry \n Azure Container Apps Environment \n User Assigned Managed Identity \n \n Some of these resources must have unique names within the scope of the Azure subscription. To ensure this uniqueness, you can use the initials, sequence, date, suffix pattern. To apply this pattern, name your resources by listing your initials, some sequence number, today's date, and some kind of resource specific suffix - for example, rg for \"resource group\". The following environment variables use this pattern. Replace the placeholder values in UNIQUE_VALUE and LOCATION with your own values and run the commands in your terminal. \n export UNIQUE_VALUE=<your unique value, such as mjg101424>\nexport RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg-passwordless\nexport LOCATION=<your desired Azure region for deploying your resources - for example, eastus>\nexport REGISTRY_NAME=${UNIQUE_VALUE}regpasswordless\nexport DB_SERVER_NAME=${UNIQUE_VALUE}dbpasswordless\nexport DB_NAME=demodb\nexport ACA_ENV=${UNIQUE_VALUE}envpasswordless\nexport ACA_NAME=${UNIQUE_VALUE}acapasswordless\nexport UAMI_NAME=\"${UNIQUE_VALUE}-uami-image-pull\" \n Next, create a resource group by using the following command: \n az group create \\\n --name $RESOURCE_GROUP_NAME \\\n --location $LOCATION \n Create an Azure Database for PostgreSQL flexible server instance by using the following command: \n az postgres flexible-server create \\\n --name $DB_SERVER_NAME \\\n --resource-group $RESOURCE_GROUP_NAME \\\n --database-name $DB_NAME \\\n --public-access None \\\n --sku-name Standard_B1ms \\\n --tier Burstable \\\n --active-directory-auth Enabled \n Create the Azure Container Registry and get the login server: \n az acr create \\\n --resource-group $RESOURCE_GROUP_NAME \\\n --location ${LOCATION} \\\n --name $REGISTRY_NAME \\\n --sku Basic\n\nexport LOGIN_SERVER=$(az acr show \\\n --name $REGISTRY_NAME \\\n --query 'loginServer' \\\n --output tsv) \n Create the Azure Container Apps environment: \n az containerapp env create \\\n--resource-group $RESOURCE_GROUP_NAME \\\n--location $LOCATION \\\n--name $ACA_ENV \n This blog post uses YAML template to deploy custom probes on Azure Container Apps, which requires to specify managed identity to access container registry. \n Run the command to create a user assigned managed identity: \n az identity create --name ${UAMI_NAME} --resource-group ${RESOURCE_GROUP_NAME}\n\nexport UAMI_CLIENT_ID=$(az identity show --name ${UAMI_NAME} --resource-group ${RESOURCE_GROUP_NAME} --query \"clientId\" --output tsv)\nexport UAMI_ID=$(az identity show --name ${UAMI_NAME} --resource-group ${RESOURCE_GROUP_NAME} --query \"id\" --output tsv) \n Grant AcrPull permission to the managed identity: \n az role assignment create \\\n --assignee ${UAMI_CLIENT_ID} \\\n --role \"AcrPull\" \\\n --scope $(az acr show --name ${REGISTRY_NAME} --query id --output tsv) \n Deploy the Quarkus app to Azure Container Apps \n You have set up all the necessary Azure resources to run the Quarkus app on Azure Container Apps. In this section, you containerize the Quarkus app and deploy it to Azure Container Apps. \n Use the following command to build the application itself. This command uses the Jib extension to build the container image. \n export TODO_QUARKUS_IMAGE_NAME=todo-quarkus-aca\nexport TODO_QUARKUS_IMAGE_TAG=${LOGIN_SERVER}/${TODO_QUARKUS_IMAGE_NAME}:1.0\nmvn clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${TODO_QUARKUS_IMAGE_TAG} \n Next, sign in to the Azure Container Registry and push the Docker image to the registry: \n az acr login --name $REGISTRY_NAME \ndocker push $TODO_QUARKUS_IMAGE_TAG \n Create YAML template for health probes \n In this blog post, you use YAML template to define the health probes. The following YAML configuration defines the deployment of a containerized Quarkus application to Azure Container Apps with health checks and ingress for public access. \n In this example, you use default values for most of health probe properties. The properties listed in the following table are required. You can add more properties and modify the values based on your requirements. \n Parameter Name Value Description identity.userAssignedIdentities ${UAMI_ID} User-assigned managed identity for creating the Container App. registries.server ${LOGIN_SERVER} The login server address of the Azure Container Registry (ACR). registries.identity ${UAMI_ID} Resource ID of the user-assigned managed identity with 'AcrPull' permission. containers.name ${ACA_NAME} Name of the container running the application. containers.image ${TODO_QUARKUS_IMAGE_TAG} The tag of the container image to be deployed. \n Run this command to generate the YAML configuration using the current environment variable values and save it to quarkus-probes.yaml. \n cat <<EOF > quarkus-probes.yaml\nidentity:\n type: userAssigned\n userAssignedIdentities:\n \"${UAMI_ID}\": {}\nproperties:\n configuration:\n registries:\n - server: ${LOGIN_SERVER}\n identity: ${UAMI_ID}\n ingress:\n external: true\n allowInsecure: false\n targetPort: 8080\n template:\n revisionSuffix: quarkus-health\n containers:\n - name: ${ACA_NAME}\n image: ${TODO_QUARKUS_IMAGE_TAG}\n probes:\n - type: Liveness\n httpGet:\n path: /q/health/live\n port: 8080\n initialDelaySeconds: 10\n periodSeconds: 5\n - type: Readiness\n httpGet:\n path: /q/health/ready\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 3\n - type: Startup\n httpGet:\n path: /q/health/started\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 3\nEOF \n Then, use the following command to create a Container Apps instance to run the app after pulling the image from the Container Registry: \n az containerapp create \\\n --name ${ACA_NAME} \\\n --environment $ACA_ENV \\\n --resource-group $RESOURCE_GROUP_NAME \\\n --yaml quarkus-probes.yaml \n Finally, connect the Azure Database for PostgreSQL Flexible Server instance to the container app using Service Connector: \n # Install the Service Connector passwordless extension \naz extension add --name serviceconnector-passwordless --upgrade --allow-preview true\n\naz containerapp connection create postgres-flexible \\\n--resource-group $RESOURCE_GROUP_NAME \\\n--name $ACA_NAME \\\n--target-resource-group $RESOURCE_GROUP_NAME \\\n--server $DB_SERVER_NAME \\\n--database $DB_NAME \\\n--system-identity \\\n--container $ACA_NAME \\\n--yes \n Wait for a while until the application is deployed, started and running. Then get the application URL and open it in a browser: \n QUARKUS_URL=https://$(az containerapp show \\\n--resource-group $RESOURCE_GROUP_NAME \\\n--name $ACA_NAME \\\n--query properties.configuration.ingress.fqdn -o tsv) \n\necho $QUARKUS_URL \n You can access the container app health using curl $QUARKUS_URL/q/health/. The output should be similar to what you see in Run the Quarkus app locally. \n Exercise: Observe health checks \n In this exercise, you observe how the health checks work by stopping and starting the PostgreSQL database, and checking the application availability during each step. \n To stop PostgreSQL database, run the following command: \n az postgres flexible-server stop --resource-group $RESOURCE_GROUP_NAME --name $DB_SERVER_NAME \n Then, check the logs of application: \n az containerapp logs show --name ${ACA_NAME} --resource-group ${RESOURCE_GROUP_NAME} \n The logs are similar to the following, showing that the health check detects a problem due to the database being unavailable: \n {\"TimeStamp\": \"2025-05-16T09:08:49.0579912+00:00\", \"Log\": \"F 2025-05-16 09:08:49,057 INFO [io.sma.health] (vert.x-eventloop-thread-1) SRHCK01001: Reporting health down status: {\\\"status\\\":\\\"DOWN\\\",\\\"checks\\\":[{\\\"name\\\":\\\"TodoResource API reachable\\\",\\\"status\\\":\\\"DOWN\\\"},{\\\"name\\\":\\\"Database connections health check\\\",\\\"status\\\":\\\"DOWN\\\",\\\"data\\\":{\\\"<default>\\\":\\\"Unable to execute the validation check for the default DataSource: Acquisition timeout while waiting for new connection\\\"}}]}\"} \n At this point, the logs show that the Container App is attempting to activate the application, but it can't connect to the database. \n To restore the database and application availability, start the PostgreSQL database with the following command: \n az postgres flexible-server start --resource-group $RESOURCE_GROUP_NAME --name $DB_SERVER_NAME \n Once the database is started, the application becomes available again. \n \n Without health checks, the application won't detect a database failure until a request tries to access the data. Implementing health checks enables proactive monitoring and faster detection of such issues. \n Clean up resources \n To avoid Azure charges, you should clean up unneeded resources. When the resources are no longer needed, use the az group delete command to remove the resource group and all Azure resources within it: \n az group delete \\\n--name $RESOURCE_GROUP_NAME \\\n--yes \\\n--no-wait \n Next steps \n In this blog post, you monitor the Quarkus app health leveraging SmallRye Health and health probes of Azure Container Apps. To learn more, explore the following resources: \n \n Health Endpoint Monitoring pattern \n Azure Container Apps \n Deploy a Java application with Quarkus on an Azure Kubernetes Service cluster \n Observe Quarkus applications with Azure Application Insights using OpenTelemetry \n Deploy serverless Java apps with Quarkus on Azure Functions \n Secure Quarkus applications with Microsoft Entra ID using OpenID Connect \n Quarkus \n Jakarta EE on Azure \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"21881","kudosSumWeight":1,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDEzOTY1LWNCeFB4cA?revision=26\"}"}}],"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:4414793":{"__typename":"Conversation","id":"conversation:4414793","topic":{"__typename":"BlogTopicMessage","uid":4414793},"lastPostingActivityTime":"2025-05-19T16:11:40.088-07:00","solved":false},"User:user:2392358":{"__typename":"User","uid":2392358,"login":"Ikennaokeke","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yMzkyMzU4LTU4NDI1N2lFQjJCNzA3NjA1RTE2RDNG"},"id":"user:2392358"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzkzLWZHY2VqOA?revision=4\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzkzLWZHY2VqOA?revision=4","title":"image (9).png","associationType":"COVER","width":1445,"height":759,"altText":""},"BlogTopicMessage:message:4414793":{"__typename":"BlogTopicMessage","subject":"Reimagining App Modernization for the Era of AI","conversation":{"__ref":"Conversation:conversation:4414793"},"id":"message:4414793","revisionNum":4,"uid":4414793,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:2392358"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" This blog highlights the key announcements and innovations from Microsoft Build 2025. It focuses on how AI is transforming the software development lifecycle, particularly in app modernization. Key topics include the use of GitHub Copilot for accelerating development and modernization, the introduction of Azure SRE agent for managing production systems, and the launch of the App Modernization Guidance to help organizations modernize their applications with AI-first design. The blog emphasizes the strategic approach to modernization, aiming to reduce complexity, improve agility, and deliver measurable business outcomes ","introduction":"What’s New at Microsoft Build 2025","metrics":{"__typename":"MessageMetrics","views":2421},"postTime":"2025-05-19T09:00:00.034-07:00","lastPublishTime":"2025-05-19T16:11:40.088-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" If you’ve ever been to Microsoft Build, you know it’s not just another tech conference, it’s where ideas spark, connections happen, and the future of software takes shape. This year in Seattle, the energy is off the charts. And for those of us passionate about app modernization, it’s a moment we’ve been building toward (pun intended). \n At Microsoft, we believe modernization is more than just updating old systems—it’s about unlocking new possibilities with AI at the center. And at Build 2025, we’re showing exactly how we’re doing that. \n AI Is Changing Everything—And We’re Here for It \n Let’s start with the big picture: AI is transforming the entire software development lifecycle. From how we build apps to how we manage and scale them, AI is the force multiplier, reshaping how we work, build, deploy, modernize and maintain applications. \n Here’s what’s new: \n Build smarter \n With GitHub Copilot and Copilot extensions, developers can go from idea to working code in record time. Whether you're building new AI-powered apps or modernizing existing ones, GitHub Copilot is like having a supercharged teammate by your side. Make sure to check out our announcements on agentic DevOps, the next evolution of DevOps. \n Modernize faster \n At Microsoft, we’re using AI to help organizations move from legacy to cloud-native at scale. And now, with app modernization capabilities in GitHub Copilot, developers can offload complex and time-consuming tasks to rapidly update, upgrade, and modernize Java and .NET applications. \n The app modernization capabilities in GitHub Copilot helps developers assess, remediate, and validate code changes for re-platforming to Azure services. By using agent mode in GitHub Copilot, the AI agent in GitHub Copilot learns from selected commits and diffs and automate repetitive tasks for changes at scale, significantly reducing the time from weeks and months to mere hours. GitHub Copilot uses pre-define hero formulas to offer recommendations and suggestions for resolving common dependency issues, enabling developers to address common migration tasks for storage, message brokers, authentications, and cache migration, etc. Through the process, humans keep staying in the loop for validation and confirmation, ensuring every step aligns with project requirements and standards. Java and .NET developers can modernize their applications, runtime, framework, and library updates with minimal dev cost and high trust by utilizing GitHub Copilot within Visual Studio Code and Visual Studio. By using agent mode within GitHub Copilot, an AI agent creates an intelligent plan for Java and .NET versions upgrade with an option of upgrading related dependencies such as Spring Boot and JUnit, visualize every task through the upgrade journey, automatically fix errors, learn from developers’ inputs and summarize the upgrade process for review and commit. GitHub Copilot enables upgrades between the most popular Java versions, including Java 8, 17 and 21, and supports the upgrades between .NET Core, .NET 6 and .NET 8. \n Customer impact \n \"Upgrading our flagship .NET application spanning over 450,000 lines of code that has historically been a multi-year effort. But with the GitHub Copilot Upgrade capability, we are now seeing a dramatic acceleration. The tool handled complex projects and package changes with ease, giving me confidence that we can move to .NET 9 much faster. I even tested it on a partner team's project and completed the upgrade so effortlessly that I immediately recommended they try it too.\" — Bart, Principal Software Architect, Exact \n Learn more about how GitHub Copilot now supports modernizing .NET and Java applications. \n Manage with confidence \n Azure SRE agent is a new agentic AI service that can free developers from the constant stress of late-night alerts by monitoring production systems 24/7, responding to incidents in real time, and autonomously troubleshooting issues as they arise. It can cut the time to determine root cause analysis (RCA) to just a few minutes, helping developers reduce the cost of operations while improving uptime. SRE Agent continuously learns from the application health and performance for production applications on Azure, to build context and provide insights for faster troubleshooting. \n Check out this blog for more details on how it works and how to sign up for the preview. \n Introducing the App Modernization Guidance \n To support this transformation, we’re launching the App Modernization Guidance—a comprehensive, step-by-step playbook designed to help organizations: \n \n Understand what to modernize and why \n Migrate and rebuild apps with AI-first design \n Continuously optimize with built-in governance and observability \n \n This guidance is built for the AI era. It combines Microsoft’s enterprise experience with the best practices, technical patterns, and AI-enabled tooling like Azure Migrate and GitHub Copilot to help organizations modernize their applications, data, and infrastructure with confidence. \n It’s more than guidance, it’s a strategic approach that empowers IT, developers, and transformation teams to: \n \n Accelerate innovation with AI-powered modernization \n Reduce complexity and technical debt \n Improve agility, performance, and security \n Deliver measurable business outcomes faster \n \n In Reinventing Software Development blog by Mike Hulme, GM Digital App Innovation at Microsoft he stated: “App Modernization Guidance applies decades of enterprise apps experience to help you analyze production apps and prioritize modernization efforts, while applying best practices and technical patterns to ensure success. \n Through the App Modernization Guidance and AI innovations with app modernization capabilities in GitHub Copilot, Microsoft is reimagining how businesses transform with cloud and AI. Together with our partners, we’re helping organizations modernize confidently, accelerate innovation, and deliver meaningful business outcomes. \n \"Backed by our deep expertise in application modernization, the Application Modernization Guidance from Microsoft framework reinforces our structured approach to transforming complex application estates. Paired with Microsoft GitHub Copilot assistants and agents, it enables clients to accelerate delivery and unlock greater business value with confidence. It’s a powerful enabler for those ready to modernize but unsure where or how to start.” \n — Stephane Girard, Chief Technology Officer, Global Cloud & Custom Application - Capgemini \n “The App Modernization Guidance from Microsoft gives us a clear, scalable approach to help our clients modernise with confidence and deliver real business value. In combination with our advanced generative AI based tooling such as our Decipher platform, it has become a key part of how Version 1 delivers modernisation and transformation at scale.” \n — Brad Mallard, Chief Technology Officer - Version 1 \n This guidance builds on decades of experience working with customers and our vast ecosystem of partners on enterprise modernization. We’ve had it in private preview working with customers on app modernization projects over the past year. And we are now excited to make it generally available to all customers. \n This guidance plus the new tooling capabilities will all be made available in familiar places for customers like our Cloud Adoption Framework and Azure Essentials where you’ll find all our expert resources, guidance, and tooling to accelerate your cloud journey. \n Explore the Build Experience \n Whether you're attending in person or tuning in digitally, here’s where you can dive deeper into app modernization and AI-powered development: \n \n Title \n \n Date \n \n Time \n \n Format \n \n BRK199: Unlocking the Future of App Modernization with Azure \n \n Monday, May 19 \n \n 11:45 PM – 12:45 PM PDT \n \n In-person & Digital \n \n BRK201: Innovate, Deploy & Optimize Your Apps Without Infrastructure Hassles \n \n Monday, May 19 \n \n 3:00 PM – 4:00 PM PDT \n \n In-person & Digital \n \n BRK131: Java App Modernization Simplified with AI \n \n Wednesday, May 21 \n \n 12:30 PM – 1:30 PM PDT \n \n In-person & Digital \n \n BRK183: Improving App Health with Health Modeling and Chaos Engineering \n \n Wednesday, May 21 \n \n 9:00 AM – 10:00 AM PDT \n \n In-person & Digital \n \n Explore the various breakout, demo and lab sessions at Microsoft Build, May 19-22, to dive deeper into these Azure App Platform innovations. We can’t wait to see what you will build next! \n \n Let’s Build What’s Next—Together \n App modernization isn’t just a tech trend—it’s a business imperative. And at Microsoft Build 2025, we’re here to help you lead that transformation with the power of AI. \n Whether you’re joining us in person or tuning in online, we can’t wait to show you what’s possible. Follow along on Tech Community, join the conversation on social, and let’s build the future—together. \n Explore the App Modernization Guidance ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"9028","kudosSumWeight":2,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDE0NzkzLWZHY2VqOA?revision=4\"}"}}],"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/bS00NDE0NzkzLWZHY2VqOA?revision=4"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"WIDE","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4411210":{"__typename":"Conversation","id":"conversation:4411210","topic":{"__typename":"BlogTopicMessage","uid":4411210},"lastPostingActivityTime":"2025-05-16T17:51:18.926-07:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW53YVk0Qw?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW53YVk0Qw?revision=13","title":"Frame-Header-900x500.jpg","associationType":"COVER","width":3751,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVFNekVDbA?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVFNekVDbA?revision=13","title":"Frame-1.jpg","associationType":"BODY","width":4167,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLU5pZlRRTg?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLU5pZlRRTg?revision=13","title":"Frame-2.jpg","associationType":"BODY","width":4167,"height":2085,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUdHU1N4Yg?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUdHU1N4Yg?revision=13","title":"Frame-3.jpg","associationType":"BODY","width":4168,"height":2085,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTljSU9UVQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTljSU9UVQ?revision=13","title":"Frame-4.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVg5eFd2SA?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVg5eFd2SA?revision=13","title":"Frame-5.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9WbERlVQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9WbERlVQ?revision=13","title":"Frame-6.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXNNTkdZQQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXNNTkdZQQ?revision=13","title":"Frame-7.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThnTjk0ZQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThnTjk0ZQ?revision=13","title":"Frame-8.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVNXMDZPUg?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVNXMDZPUg?revision=13","title":"Frame-9 (1).jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWwycllibw?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWwycllibw?revision=13","title":"Frame-10.jpg","associationType":"BODY","width":4167,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXBJaFhLbQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXBJaFhLbQ?revision=13","title":"Frame-11.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUlIYjNSUQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUlIYjNSUQ?revision=13","title":"Frame-12.jpg","associationType":"BODY","width":4167,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWJyNnpVMg?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWJyNnpVMg?revision=13","title":"Frame-13.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9xeFJzNA?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9xeFJzNA?revision=13","title":"Frame-14.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWx5TlljdA?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWx5TlljdA?revision=13","title":"Frame-15.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThrSVVSbQ?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThrSVVSbQ?revision=13","title":"Frame-16-lower-res.jpg","associationType":"BODY","width":8000,"height":4501,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTlIVkJwZA?revision=13\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTlIVkJwZA?revision=13","title":"Frame-17.jpg","associationType":"BODY","width":4168,"height":2084,"altText":""},"BlogTopicMessage:message:4411210":{"__typename":"BlogTopicMessage","subject":"The State of Coding the Future with Java and AI – May 2025","conversation":{"__ref":"Conversation:conversation:4411210"},"id":"message:4411210","revisionNum":13,"uid":4411210,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:888651"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":1813},"postTime":"2025-05-07T10:07:39.828-07:00","lastPublishTime":"2025-05-16T17:51:18.926-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Software development is changing fast, and Java developers are right in the middle of it - especially when it comes to using Artificial Intelligence (AI) in their apps. This report brings together feedback from 647 Java professionals to show where things stand and what is possible as Java and AI come together. \n One of the biggest takeaways is this: Java developers do not need to be experts in AI, machine learning, or Python. With tools like the Model Context Protocol (MCP) Java SDK, Spring AI, and LangChain4j, they can start adding smart features to their apps using the skills they already have. Whether it is making recommendations, spotting fraud, supporting natural language search or a world of possibilities, AI can be part of everyday Java development. \n The report walks through real-world approaches that Java developers are already using - things like Retrieval-Augmented Generation (RAG), vector databases, embeddings, and AI agents. These are not just buzzwords - they help teams build apps that work well at scale, stay secure, and are easier to manage over time. For teams figuring out where to start, the report includes guidance and simple workflows to make things easier. \n In short, Java is well-positioned to keep leading in enterprise software. This is an invitation to Java architects, tech leads, decision-makers, and developers to explore what is next and build smarter, more connected apps with AI. \n Introduction \n The world of software development is changing fast. Over the past two years, we have seen a major shift – not just in tools and frameworks, but in how developers think about building software. Artificial Intelligence is now part of the everyday conversation – helping developers rethink what their applications can do and how quickly they can build them. \n In the middle of all this change, it helps to pause and look at where we are. Java developers are especially exploring how to add intelligence to their existing applications or build new ones that can learn, adapt, and scale. But with so many innovative ideas and so much information out there, the real question is – what are developers doing? \n To answer that, we reached out directly to Java professionals across the world. We wanted to understand their thinking, what they are trying, and what they need to move forward with confidence. \n Our invitation was simple - \n \"Calling all Java pros – share your insights to help simplify AI-powered apps 👉 aka.ms/java-ai.\" \n \n The response was strong. A total of 647 Java professionals took part: \n \n 587 have experience with AI - representing a wide range of perspectives and levels of AI knowledge. \n 60 have not yet explored AI - but are curious and eager to learn what is possible. \n \n Among all respondents: \n \n Two-thirds (67%) had 4 to 10 years of Java experience. \n One-third (33%) had more than 10 years of experience. \n \n \n This report highlights what we learned – and what it means for the future of Java and AI. \n The Scenario We Asked Java Pros to Imagine \n “Picture yourself adding an AI-driven feature to an existing Java-based app or building a brand-new intelligent application. This feature might improve customer experience – such as personalized recommendations – optimize business processes – like fraud detection – or enhance product searches using natural language. Your goal is to seamlessly integrate this feature, ensuring it is easy to develop, scalable, and maintainable.” \n An impressive 97 percent of respondents said they would choose Java for building this type of intelligent application. \n \n A Common Misconception \n 90 percent of respondents believed that building intelligent Java apps would require deep experience with AI, Machine Learning, or Python. \n \n Developers Can Start to Deliver Production-Grade Intelligent Java Apps without AI, ML, or Python Skills \n Myth of AI/ML and Java \n \n Java developers already have what they need – today – to build intelligent applications using modern Java-first frameworks such as Model Context Protocol (MCP) Java SDK, Spring AI, or LangChain4j. \n No prior experience in Python or Machine Learning is required for Java developers to begin adding intelligent features to their apps. \n Connecting a Java application to backend AI systems – including Large Language Models and Vector Databases – is conceptually like working with REST APIs or traditional SQL and NoSQL databases. \n Modern libraries like MCP Java SDK, Spring AI, and LangChain4j make it easier for developers to build and enhance AI-powered Java applications. These frameworks offer support for:\n \n Retrieval-Augmented Generation (RAG) \n Conversational memory \n Conversation logging \n Integration with vector stores \n Secure, observable, and safe-by-default interactions \n Streamed outputs and structured reasoning \n \n \n Java continues to play a leading role in enterprise software. This gives Java developers a natural advantage – and a unique opportunity – to lead the way in delivering intelligent features inside core business applications. \n It is also important to note that tasks requiring deep AI and Data Science knowledge are best left to specialists. Java developers can focus on app logic, integration, and delivering business value without needing to become AI experts themselves. \n \n In-Process vs HTTP-Based - A Common Misstep in AI Application Design \n AI-powered applications can be built in different ways - and one of the patterns is to embed the model directly within the same app that handles business logic and exposes the API. This is known as the in-process approach. In this setup, the model is loaded at runtime, using local weights and often relying on a GPU for inference. It is a convenient option - especially when working with models you have created from scratch or downloaded for use in your own application. \n The Shift to Model-as-a-Service - A Simple History \n Before foundation models were made available as services, most AI models were custom-built for specific use cases – like classifying documents, detecting anomalies, or predicting demand. These models were typically developed in Python using frameworks such as TensorFlow or PyTorch. Because development and usage happened in the same environment, it was natural to load the model directly into the application’s memory using local weights, and to rely on a local GPU for inference. \n This model-in-app pattern made sense when the app and the model were designed together. Many popular Python-based libraries, including PyTorch, TensorFlow, and Hugging Face Transformers, encourage this in-process setup by default. As a result, the model often becomes a local function call - tightly coupled to the application’s logic and runtime. \n However, that convenience introduces scaling and maintenance challenges. Every application instance must run on a machine with GPU access. You must allocate GPU resources per app, even when the app is idle. As demand grows, this leads to higher infrastructure costs, lower resource efficiency, and architectural rigidity. If you scale the app, you are often forced to scale GPU capacity along with it - even if only the app's business logic needs scaling. \n \n The Rise of HTTP-Based Integration with Model-as-a-Service \n The introduction of foundation models like GPT-4, available through services such as OpenAI and Azure OpenAI, brought a shift in how models are used in applications. These models are designed to handle a wide range of tasks and are offered as cloud-hosted APIs - a model-as-a-service approach. Instead of embedding the model into each application, you send a request over HTTP and receive a response. \n This change enables a new design pattern: the application and the model are treated as separate services. The app handles business logic, while the model service handles inference. This pattern brings clear advantages - modularity, cleaner separation of concerns, centralized control over GPU infrastructure, and the ability to reuse models across many applications. \n The diagram above illustrates this shift. On the left, the in-process setup binds the model tightly to the application, requiring direct GPU access and local weights. On the right, the HTTP-based setup enables applications written in any language stack - such as Java, Python, JavaScript, .NET, or Go - to interact with a shared model endpoint over HTTP. \n This separation makes it easier to update models, manage infrastructure, including GPU infrastructure, and scale intelligently. It also reflects how most modern AI platforms are now built. \n HTTP-based integration is scalable, cost-effective, and designed for modern application environments. It reduces operational complexity and gives developers the flexibility to choose the architecture that fits their needs - without being locked into one stack, tools, models, or setup. \n Myth about Python \n As we listened to Java developers across the community, a familiar pattern emerged. Many shared their experiences - and sometimes frustrations - when working with AI technologies in Java. These were not just passing remarks. They reflected real challenges - especially when it came to building or training machine learning models, where Python has long been the preferred environment. \n Here is a glimpse into what we heard: \n \n “Java has fewer AI-specific libraries compared to Python. Libraries like TensorFlow and PyTorch are more mature and feature-rich in Python, making it easier to implement complex AI models.” \n “Working on AI-powered applications with Java presents challenges, especially when building or training models. The ecosystem is not as deep as Python’s, which has tools like Scikit-learn and notebooks like Jupyter.” \n “Even though Java can be used for AI, the support for GPU acceleration is not as seamless as it is in Python. You need extra setup and tuning.” \n “There are fewer Java developers with strong AI backgrounds. It is harder to find or grow a team when Python seems to be the go-to language for most ML engineers.” \n \n These are all honest, valid observations. If the job-to-be-done is building foundation models, training models from scratch, or fine-tuning existing models, then Python is a natural choice. It offers the right tools, libraries, and ecosystem support to do that job well. \n But here is what really matters today: \n Most AI application developers - including those working in Java - are not training or fine-tuning models. They are not building models from the ground up or optimizing low-level GPU workloads. Instead, they are focused on a different job: \n \n Connecting to existing foundation models. \n Calling AI services over REST APIs. \n Using AI libraries like Spring AI and LangChain4j to orchestrate intelligent workflows. \n Querying vector databases. \n Embedding AI capabilities into production-grade enterprise applications. \n \n \n This distinction is clearly reflected in the diagram above. \n On the right side, you see “Model Training and Development” as a separate, specialized job. It is critical work - best handled by teams with deep expertise in data science and model engineering. On the left side, you see the application architecture most Java developers work with every day: REST APIs, business logic, database integration, and calls to external AI models and vector stores using AI libraries. \n This is where Java fits. \n Java developers are not building models - they are building apps on top of foundation models. \n And with tools like MCP Java SDK, Spring AI, and LangChain4j, they are not playing catch-up - they are building what matters, integrate AI into existing apps and capabilities. \n You do not need to train models. \n You just need to wire up the right parts, connect to the services that make AI possible, and deliver intelligent functionality where it belongs - inside the applications your organization already depends on. \n “You can be an AI application developer - in less than 2 minutes. \n Minute 1: Sign up for access to an LLM - Azure OpenAI, OpenAI, whatever. Get yourself an API key. \n Minute 2: Head to https://start.spring.io, specify `OpenAI` (or whatever), hit `Generate`, and then open your new Spring Boot + Spring AI project in your IDE. In your `application.properties`, you’ll need to specify your API key. Then, inject the auto-configured `ChatClient` somewhere in your code. Use the `ChatClient` to make a request to your model. \n Congratulations - you’re an AI application developer!” -- Josh Long, Spring Developer Advocate, Broadcom \n \n \"Is Java still relevant in this new era of AI?\" \n \"How do I, with my years of Java expertise, even begin to work with these Large Language Models today?\" \n These are questions I have heard time and again at community events and industry conferences. \n Today, Java developers are at a pivotal moment. Our existing skills are not just still relevant - they are the foundation for building the next generation of AI-powered applications. Thanks to frameworks like Quarkus, Langchain4j, and MCP integration, we can bridge the world of traditional enterprise development with the fast-growing world of AI - all without giving up the strengths and familiarity of Java.” – Daniel Oh, Senior Principal Developer Advocate, Red Hat \n \n The future of AI in software development will be defined by who integrates AI well into applications - both existing and new apps. Most AI-related development will be connecting models to solve real problems inside real applications. And in that space, Java is already strong. From financial services to healthcare, logistics to manufacturing - Java powers the business logic and workflows that now need to become intelligent. \n \n This is where Java developers shine. And with the right tools, they are more than ready to lead. \n Crucial Elements for Java AI Applications \n As we looked deeper into the survey results, one thing became clear – Java developers are not just interested in adding AI for the sake of it. They are focused on building practical, enterprise-ready features that are reliable, secure, and easy to maintain. \n 98% of respondents highlighted a core set of approaches or elements that they see as essential for any AI-powered Java application: \n \n Retrieval-Augmented Generation (RAG) – Bringing real-time, context-aware answers by grounding responses in trusted data. This is especially useful in enterprise scenarios where accuracy and context matter. \n Embeddings and Vector Databases – Enabling efficient semantic search and advanced knowledge retrieval. Developers recognize this as the key to making applications “understand” the meaning behind user inputs. \n Function Calling or Tool Calling – Allowing AI models to interact with APIs, pull in real-time data, or trigger backend workflows. This is where AI starts to act – not just suggest – making it a true part of the application logic. \n AI Agents – These are not just chatbots. Agents are intelligent programs that can automate or assist with tasks on behalf of users or teams. They combine reasoning, memory, and action – gathering information and triggering responses dynamically. For many developers, agents represent the next step toward intelligent automation inside business-critical workflows. \n \n \n Fundamentals for Enterprise-Grade AI Applications \n When building applications for the enterprise, developers know that intelligence alone is not enough. Trust, safety, and integration matter just as much. These are the foundational features Java developers called out: \n \n Security and Access Control – Making sure AI features respect user roles, protect sensitive data, and fit into enterprise identity systems. \n Safety and Compliance – Filtering outputs to align with internal policies, legal regulations, and brand standards. This is especially important for customer-facing features. \n Observability – Tracking how AI decisions are made, logging user and AI interactions, and making sure there is a clear record of what happened – and why. \n Structured Outputs – AI responses need to work within the system, not outside it. Structured formats – like JSON or XML – ensure smooth handoffs between the AI component and the rest of the application. \n Reasoning and Explainability – Developers want AI features that can explain their answers, show their sources, and help users trust the output – especially in domains like finance, healthcare, or compliance. \n \n Representative Scenarios and Business Impact \n To make things more concrete, let us look at two sample scenarios. These are not the only ones – just representative examples to help spark ideas. There is a broad and growing range of real-world situations where Java developers can use AI to create business value. \n Scenario One – Intelligent Workflow Automation \n Imagine a production manager at an auto manufacturer - say, Mercedes-Benz or Ford - who needs to align the assembly line schedule with real-time component availability and constantly shifting order priorities. \n \n The manager’s question is urgent and complex: “How can I adjust the production schedule based on today’s parts inventory and current orders?” Answering means pulling in data from ERP systems, supply chain feeds, vendor dashboards, and manufacturing operations - a level of complexity that can overwhelm even experienced teams. This is where AI steps in as a true copilot - working alongside the human decision-maker to gather data, flag supply constraints, and highlight scheduling options. Together, they can plan faster, adapt more confidently, and respond to change in real time. \n For Java developers, this is an opportunity to build intelligent systems that bring together data from ERP, inventory, and order management applications - enabling AI models to interact with information and collaborate with decision-makers. These systems do not rely on AI alone; they depend on strong data integration and reliable workflows - all of which can be designed, secured, and scaled within the Java ecosystem. In this way, AI becomes part of a co-working loop - and Java developers are the ones who make that loop real. \n Scenario Two – AI-Powered Process Assistants \n Picture a logistics manager at a major shipping company - FedEx, UPS, or DHL - facing cascading delays due to severe weather across multiple regions. The manager is under pressure to reroute packages efficiently while minimizing disruptions to downstream delivery schedules. \n \n The question is urgent: “What is the fastest rerouting option for delayed packages due to weather?” Answering requires combining live weather feeds, traffic data, delivery schedules, hub capacities, and driver availability - all in real time. AI acts as a true copilot at this moment, working alongside the manager to collect relevant signals, flag risk zones, and generate rerouting recommendations. Together, they respond with speed and clarity, keeping shipments moving and customers informed. \n For Java teams, this is a practical opportunity to build intelligent systems that embed AI into logistics, supply chain, and delivery operations - not by rebuilding everything, but by integrating the right data streams, APIs, and business logic. The real value lies in data orchestration, not just algorithms. Java developers are key to enabling these AI-powered assistants by securing connections across systems and building workflows that help humans and AI collaborate effectively under pressure. \n More Scenarios – World of Possibilities \n These two scenarios only scratch the surface. Developers across industries – from healthcare and finance to retail and public services – are finding ways to integrate AI that solve meaningful problems, reduce complexity, and improve how their systems perform. \n Java and AI Technology Stack \n So far, we have looked at what developers want to build and how AI is changing the way applications are designed. Now, let us look at the platform behind it all – the technology stack that powers intelligent Java applications. \n To bring these ideas to life and impact, Java developers need a foundation that connects data, apps, and AI services. We call this an AI application platform. It is not a specific product – it is an integrated platform made up of components that most developer teams already use or are familiar with. \n The goal of this platform is to make developers more productive while building intelligent features into their applications. It gives teams the freedom to choose familiar tools – while making it easier to bring in AI capabilities when and where they are needed. \n We group this platform into three areas: \n \n The app platform \n The data platform \n The AI platform \n \n Let us break it down using the numbered diagram: \n \n \n Developer Services: These are the core tools that developers use every day – IDEs, coding assistants, build tools, testing frameworks, CI/CD pipelines. They help you write, debug, and manage application code across your team. \n Container Services | Platform-as-a-Service: This is the runtime layer – where your applications are deployed and scaled. Whether using containers or a managed platform, this layer handles traffic, performance, and operational efficiency. \n Data Platform: This is where your application data lives – databases, data lakes, and other storage services. It connects structured data, business logic, and real-time events. \n AI Platform: This is where intelligence is added. It includes access to large language models, embeddings, vector search, and other tools that support natural language interactions, automation, and decision-making. \n \n Together, these four parts form the foundation for building, deploying, and managing AI-powered Java applications. \n Technology Stacks for Spring Boot and Quarkus Applications \n To make this more relatable, we highlighted two of the most widely adopted Java frameworks – Spring Boot and Quarkus. These stacks represent popular combinations that many Java teams are already using today for building cloud-native applications. \n That said, these are just representative examples. There are many valid combinations that developers, platform teams, and organizations can choose – based on their existing tools, workloads, and team preferences. \n Representative Spring Boot Stack \n \n App Platform: App hosting service of choice \n AI Library: Spring AI \n AI Platform: OpenAI \n Business Data: PostgreSQL \n Vector Database: PostgreSQL \n \n Representative Quarkus Stack \n \n App Platform: App hosting service of choice \n AI Library: LangChain4j \n AI Platform: OpenAI \n Business Data: PostgreSQL \n Vector Database: PostgreSQL \n \n Both stacks support the core capabilities needed for building intelligent apps – from secure model access and real-time data integration to observability and system-level debugging. \n But the opportunity does not stop there. \n Traditional App Servers - Tomcat, WebLogic, JBoss EAP or WebSphere \n Many enterprise applications continue to run on Tomcat, WebLogic, JBoss EAP, or WebSphere. These are stable platforms that power core business systems – and they are very much part of the AI journey. \n If you are running on one of these platforms, you can still bring intelligence into your applications. By using a Java library of choice (Spring AI or LangChain4j) , you can connect these applications to Large Language Models (LLMs) and Model Context Protocol (MCP) servers – without needing to rewrite or migrate them. \n This means that intelligence can be added, not just rebuilt – a powerful approach for teams with large existing investments in Java EE or Jakarta EE applications. \n Whether your Java app is built with Spring Boot, Quarkus, or deployed on a traditional app server, the tools are here – and the path to intelligent applications is open. You do not have to start from scratch. You can start from where you are. \n Java and MCP – The Bridge to Intelligent Applications \n One of the most important parts of the Java and AI story is MCP - the Model Context Protocol. MCP is an open, flexible, and interoperable standard that allows large language models to connect with the outside world - and more importantly, with real applications and real data. \n At its core, MCP is a bridge - a structured way for models to access enterprise data, invoke tools, and collaborate with AI agents. It gives developers control over how data moves, how decisions are made, and how actions are triggered. The result is safer, more predictable AI behavior inside real-world systems. \n MCP servers can be implemented in any language stack – such as Java, C#, Python, and NodeJS - and integrated into any AI-powered application, regardless of how that application is written. That interoperability makes MCP especially valuable for teams working across systems and languages. \n If you are building an MCP server using Java, the official MCP Java SDK maintained by Anthropic provides the right starting point. You can also use frameworks like Spring or Quarkus to implement MCP servers with full enterprise capabilities. \n For those building applications using Spring AI or LangChain4j, both libraries support connecting to any MCP server - whether running locally or remotely - to orchestrate tools, call functions, and manage agent behavior as part of the runtime flow. \n In addition, ready-to-use implementations like the Azure MCP Server make it easier to add intelligence to backends, orchestrate workflows, and shape AI agent behavior without starting from scratch. \n Authentication and Authorization \n Security is a critical part of any enterprise-grade solution - and MCP is no exception. \n In collaboration with Anthropic, Microsoft proposed a new authorization specification for MCP. This specification has now been finalized and is being implemented across MCP clients and servers to ensure that all interactions are secure, policy-driven, and consistent across environments. \n This continued investment in standards, tooling, and security is helping MCP mature into a core enabler of intelligent applications - especially for enterprise Java teams looking to move fast without compromising on trust or control. \n Preferred Libraries – What Java Developers Are Choosing \n As part of our outreach to 647 Java professionals, we asked a key question: \n “Which AI frameworks or libraries would you consider for building or integrating intelligence into Java applications?” \n Here is what they told us: \n \n Spring AI - selected by 43 percent. \n LangChain4j – preferred by 37 percent. \n \n \n These two libraries clearly lead the way. They reflect the maturity of the Java ecosystem and show strong alignment with the two most active communities – Spring and Jakarta EE. \n Spring AI and LangChain4j offer higher-level abstractions that simplify how developers connect to AI services, manage context, interact with models, and build intelligent features. For developers already working in Spring Boot or Quarkus, these libraries feel familiar – and that lowers the barrier to adding intelligent capabilities into existing codebases. \n Other Developer Preferences \n At the same time, a considerable number of developers – 37 percent and 29 percent – also shared that they would prefer to work directly with AI service provider libraries or call REST APIs. \n This is not a surprise. In fact, it is a healthy signal. Many teams use these lower-level integrations to gain early access to new features or customize interactions in ways that higher-level libraries may not yet support. \n It is important that these developers know: You are not wrong - but you are not alone either. \n While direct API integration offers flexibility, AI libraries like Spring AI and LangChain4j are designed to make those experiences easier. They wrap the complexity, manage context, offer tested patterns that align with enterprise application needs - like observability, security, and structured outputs – plug your code into the Spring and Java ecosystem of possibilities for deep integration. \n Evolving Together \n As AI services evolve, day-zero support will almost always appear first in the service provider’s native SDKs and REST APIs. That is expected. But as those capabilities stabilize, AI libraries like Spring AI and LangChain4j will latch on – offering developers a smoother, more consistent programming experience. \n The result: Developers get to start fast with APIs – and scale confidently with higher level libraries and frameworks. \n Top Challenges and Areas Needing Improvement \n As part of our research, we asked 647 Java professionals to share the biggest challenges they face – and where they believe improvements would help the most. The answers reflected where the community is today – eager to build but still facing some friction points. \n \n Top Challenges Java Developers Encounter \n \n Lack of clear starting points and step-by-step guidance. \n Feeling overwhelmed by the variety of AI models, libraries, and tools. \n Misconceptions that machine learning expertise is required. \n Complexity with integrating AI features into existing applications - particularly introduced by suboptimal patterns such as directly calling REST APIs through low-level HTTP libraries, invoking Python-based routines through external OS processes, or loading models into the application’s memory at runtime using local weights and GPU resources. \n Missing features in some of the current libraries and frameworks. \n Uncertainty about scaling applications and safely using private models on the cloud. \n \n Areas Developers Believe Need the Most Improvement \n \n Clear and practical step-by-step workflows. \n Guidance on how to securely integrate private models. \n Examples that show how to use chat models for function calling and streaming completions. \n Educational content that explains completions, reasoning, and data validation. \n Tools and how-to guides for embedding-based search and question answering. \n Tutorials on how to leverage external data to improve model output. \n \n Java Developers – Familiar with AI vs. New to AI \n Among all respondents: \n \n 87 percent are familiar with AI. \n 13 percent are newer to AI and just getting started. \n \n Java Developers New to AI \n These developers are exploring use cases, evaluating models, and building early prototypes. Their top challenges are: \n \n Lack of clear starting points. \n Too many options in terms of tools and models. \n Need for simple, practical guidance. \n \n The top areas that will benefit them: \n \n Step-by-step development workflows. \n Examples of using chat models and completions. \n Simple breakdowns of key concepts like reasoning and validation. \n \n Java Developers Familiar with AI \n These developers are further along – often in development or production stages – and face a wide range of challenges. A top need for them is: \n \n Secure ways to integrate private models into Java apps. \n They also benefit from deeper technical content, patterns, and advanced tooling support. \n \n Moving Forward with Confidence \n This space is evolving faster than anyone expected – and that can feel overwhelming. But the top challenges Java developers face are real, and the community is actively addressing them. \n It is important not to worry about the number of tools, models, or libraries. That diversity is a sign of progress. Models will keep evolving. New ones will arrive. And this is exactly where higher-level Java libraries step in. \n Spring AI, LangChain4j, and the MCP Java SDK are designed to simplify the path forward. These libraries create a layer of abstraction that shields your application code from constant changes. You can build once – and switch models or providers as needed, without rewriting core logic. \n And these libraries are alive. You can see them in action on GitHub – through open issues, pull requests, and rapid updates. If you see a missing feature, open an issue. If you want to contribute, send a pull request. These are responsive communities that welcome participation. \n “AI, for most people today, effectively means \"sending human-language sentences to an HTTP endpoint.\" 80% of the noise right now is about the artful and scalable connection of these models with your data and business logic - data guarded by services whose business logic is statistically implemented in Spring Boot and Spring AI. We, as JVM developers, are uniquely well-positioned to expand the AI universe. \n Don’t delay - start (spring.io) today!” -- Josh Long, Spring Developer Advocate, Broadcom \n \n “By combining Quarkus’s speed, Langchain4j’s AI orchestration, and MCP’s unified tool access, Java developers are in a unique position to lead this transformation - building intelligent, resilient applications using the tools and approaches we know well. Working with AI is no longer a distant specialty - it is becoming a natural part of modern Java development” -- Daniel Oh, Senior Principal Developer Advocate, Red Hat \n AI Concepts for App Developers \n As you build your first intelligent Java applications, it helps to become familiar with key AI concepts such as foundation models, chat models, embedding models, prompts, inference endpoints, context windows, and vector search (see diagram below for a curated list). These concepts are not just theory - they directly shape how your applications interact with AI systems. \n \n To make it easier, we created a simple learning prompt that you can use with your favorite Chat Model like ChatGPT and Claude: \n \n // Prompt Template for Java Developers Learning AI Concepts \n// (Replace <TERM> with the topic you want to learn.) \n\nI am a Java enterprise app developer focused on building \nAI-powered Java applications. I do not fully understand \nwhat '<TERM>' means. \n\nPlease explain it to me so simply that I can think \nabout it like a Java library or service \nI would naturally use. \n\nUse examples from enterprise Java (like APIs, search, \nsummarization, customer service bots) that I would \ntypically build. If possible, give a mental model I can \nremember and relate to Java patterns. Also, suggest \na small sample of how I would use '<TERM>' via an \nAPI in a Java app, if that helps understanding. \n \n You can replace <TERM> with any concept you want to learn, such as \"Embedding Model\" or \"Inference Endpoint,\" and get a focused, practical explanation that fits how you already think as a Java developer. \n By practicing with this method, you can quickly build second-nature familiarity with the terms and ideas behind AI development - without needing a research background. With the strong foundation you already have in Java, you will be ready to confidently integrate, adapt, and innovate as AI tools continue to evolve. \n AI Is Now a Java Developer’s Game \n You do not need to train your own models to start building intelligent applications. You can do it today - using popular, production-ready foundation models - all within the Java ecosystem you already know and trust. These are still Java applications at their core. \n What sets you apart is not just your Java expertise - it is your deep understanding of how real business processes work and how to bring them to life in code. You know how to build, secure, scale, and operate reliable systems - and now, you can apply those same skills to deliver AI-powered solutions that run in the environments your teams already use, including Microsoft Azure. \n AI-Assisted App Development – A Powerful Companion to Building Intelligent Java Apps \n No discussion about the future of software development is complete without acknowledging the rise of AI-assisted development. This is a separate - but equally important - path alongside building intelligent applications. And it is transforming how developers write, upgrade, and manage code. \n At the center of this shift is tools like GitHub Copilot - a tool that is reshaping how developers approach their daily work. \n Developers using GitHub Copilot report coding up to 55 percent faster, freeing up time to focus on design decisions, solving business problems, and writing less boilerplate code. But the benefits go deeper than speed - 75 percent of developers say that Copilot makes their work more satisfying. \n Today, 46 percent of all code on GitHub is written with AI assistance, and over 20,000 organizations are already embracing these tools to improve development workflows and accelerate delivery. \n Built Into the Tools You Already Use \n GitHub Copilot works where Java developers already build – in IDEs like Visual Studio Code, IntelliJ, and Eclipse. It brings contextual, customizable assistance, powered by the latest models such as gpt-4o and Claude 3.5 Sonnet. \n \n Whether it is suggesting code snippets, auto-completing functions, or helping enforce best practices, GitHub Copilot enhances the quality of code and the productivity of developers – all while keeping them in control. \n Helping Modernize and Maintain Java Codebases \n One of the most exciting capabilities is GitHub Copilot’s growing role in modernizing Java applications. Late last year, the GitHub Copilot App Modernization – Java Upgrade feature entered private preview. \n This tool is designed to support large, mission-critical tasks like: \n \n Upgrading Java versions and frameworks \n Refactoring code \n Updating dependencies \n Aligning to cloud-first practices \n \n The process starts with your local Java project. Copilot provides an AI-generated upgrade assistant, and developers stay in the loop to approve changes step-by-step. The goal is to take the heavy lifting out of routine upgrades while ensuring everything remains safe and aligned with your architecture. \n Beyond App Code – Towards Cloud-Ready Modernization \n Technology providers like Microsoft are investing deeply in this space to bring additional capabilities into developer workflows – including: \n \n Secure identity handling through passwordless authentication \n Certificate management and secrets handling \n Integration with PaaS services for storage, data, caching, and observability \n \n All of this reduces the time it takes to bring legacy apps forward and prepare them for modern, scalable deployments – so teams can spend more time building intelligent features and less time managing technical debt. \n Two Paths – One Goal \n AI-assisted development, including upgrading and modernizing apps with AI, and building intelligent apps are not the same – but together, they form a powerful foundation. One helps you write and modernize code faster, the other helps you deliver smarter features inside your apps. \n For Java developers, this means there is support at every step – from idea to implementation to impact. \n Start Today and Move the Java Community Forward \n The message from 647 Java professionals is clear: Java developers are ready – and the tools they need to build intelligent applications are already here. \n If you are a Java developer and have not started your AI journey yet now is the right time. You do not need to become an AI expert. You do not need to change your language, tools, or working style. Modern Java frameworks and libraries like Spring AI, LangChain4j, and the MCP Java SDK are designed to work the way you already build – while making it easier to add intelligence, automation, and smart experiences to your applications. \n You can start with what you know – and grow into what is next: aka.ms/spring-ai and aka.ms/langchain4j. \n \n To Java Ecosystem Leaders \n We also want to speak directly to those shaping the Java ecosystem – community leaders, experienced developers, and technical influencers. Your role is more important than ever. \n We invite you to: \n \n Show what is possible – share real examples of how AI features can be integrated into Java applications with minimal friction. \n Promote best practices – use meetups, blogs, workshops, and developer forums to spread practical guidance and patterns that others can follow. \n Improve the experience – contribute documentation, examples, and even code to help close the gaps developers face when starting their AI journeys. \n Push frameworks forward – help identify and implement missing features that can simplify Java + AI integration and speed up real-world adoption. \n \n This is not just about tools – it is about people helping people move forward. \n Many of you already helped make this research possible – by spreading the word on LinkedIn, sharing the survey, and encouraging others to contribute. Your support made a difference. And now, these findings belong to the entire Java ecosystem – so we can act on them together. \n To the Java Developers Who Participated \n Thank you. \n Your input – your time, your thoughts, your challenges, your ideas – shaped this entire report. You told us what is working, what is missing, and what you need next. We hope this reflection of your voices is helpful – to you and to the broader Java community. \n The road ahead is exciting – and Java is ready to lead. \n AI Learning Resources for Java App Developers \n Azure AI Services documentation \n Azure AI Services quick starts – like Chat Completions and Use Your Data \n Build Enterprise Agents using Java and Spring \n OpenAI RAG with Java, LangChain4j and Quarkus \n Spring AI \n \n Learn how to build effective agents with Spring AI \n Spring AI reference documentation \n Prompt Engineering Techniques with Spring AI \n Spring AI GitHub repo \n Spring AI examples \n Spring AI updates \n The Seamless Path for Spring Developer to the World of Generative AI \n \n LangChain4j \n \n Supercharge your Java application with the power of LLMs \n LangChain4j GitHub repo \n LangChain4j Examples \n Quarkus LangChain4j \n Quarkus LangChain4j Workshop \n LangChain4j updates \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"41777","kudosSumWeight":2,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW53YVk0Qw?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVFNekVDbA?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLU5pZlRRTg?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUdHU1N4Yg?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTljSU9UVQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVg5eFd2SA?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9WbERlVQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXNNTkdZQQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThnTjk0ZQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLVNXMDZPUg?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWwycllibw?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLXBJaFhLbQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLUlIYjNSUQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWJyNnpVMg?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLW9xeFJzNA?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE2","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLWx5TlljdA?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE3","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLThrSVVSbQ?revision=13\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE4","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDExMjEwLTlIVkJwZA?revision=13\"}"}}],"totalCount":18,"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/bS00NDExMjEwLW53YVk0Qw?revision=13"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"WIDE","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4398187":{"__typename":"Conversation","id":"conversation:4398187","topic":{"__typename":"BlogTopicMessage","uid":4398187},"lastPostingActivityTime":"2025-04-23T13:22:39.654-07:00","solved":false},"User:user:360851":{"__typename":"User","uid":360851,"login":"madhurabharadwaj","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0zNjA4NTEtMjUyNjg5aTcxMkE1Njk5MjBBM0JFODU"},"id":"user:360851"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk4MTg3LUZNRFd3SQ?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk4MTg3LUZNRFd3SQ?revision=3","title":"FunctionsLogopng.png","associationType":"COVER","width":600,"height":315,"altText":""},"BlogTopicMessage:message:4398187":{"__typename":"BlogTopicMessage","subject":"Keep Your Azure Functions Up to Date: Identify Apps Running on Retired Versions","conversation":{"__ref":"Conversation:conversation:4398187"},"id":"message:4398187","revisionNum":3,"uid":4398187,"depth":0,"board":{"__ref":"Blog:board:AppsonAzureBlog"},"author":{"__ref":"User:user:360851"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Ensure your Azure Functions stay supported and secure with these Azure CLI scripts, helping you identify and upgrade apps running on soon-to-be-retired or unsupported language versions.","metrics":{"__typename":"MessageMetrics","views":2237},"postTime":"2025-03-27T14:13:33.387-07:00","lastPublishTime":"2025-03-27T14:13:33.387-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Running Azure Functions on retired language versions can lead to security risks, performance issues, and potential service disruptions. While Azure Functions Team notifies users about upcoming retirements through the portal, emails, and warnings, identifying affected Function Apps across multiple subscriptions can be challenging. \n To simplify this, we’ve provided Azure CLI scripts to help you: ✅ Identify all Function Apps using a specific runtime version ✅ Find apps running on unsupported or soon-to-be-retired versions ✅ Take proactive steps to upgrade and maintain a secure, supported environment \n Read on for the full set of Azure CLI scripts and instructions on how to upgrade your apps today! \n Why Upgrading Your Azure Functions Matters \n Azure Functions supports six different programming languages, with new stack versions being introduced and older ones retired regularly. Staying on a supported language version is critical to ensure: \n \n Continued access to support and security updates \n Avoidance of performance degradation and unexpected failures \n Compliance with best practices for cloud reliability \n \n Failure to upgrade can lead to security vulnerabilities, performance issues, and unsupported workloads that may eventually break. Azure's language support policy follows a structured deprecation timeline, which you can review here. \n How Will You Know When a Version Is Nearing its End-of-Life? \n The Azure Functions team communicates retirements well in advance through multiple channels: \n \n Azure Portal notifications \n Emails to subscription owners \n Warnings in client tools and Azure Portal UI when an app is running on a version that is either retired, or about to be retired in the next 6 months \n Official Azure Functions Supported Languages document here \n \n To help you track these changes, we recommend reviewing the language version support timelines in the Azure Functions Supported Languages document. \n However, identifying all affected apps across multiple subscriptions can be challenging. To simplify this process, I've built some Azure CLI scripts below that can help you list all impacted Function Apps in your environment. \n \n Linux* Function Apps with their language stack versions: \n \n az functionapp list --query \"[?siteConfig.linuxFxVersion!=null && siteConfig.linuxFxVersion!=''].{Name:name, ResourceGroup:resourceGroup, OS:'Linux', LinuxFxVersion:siteConfig.linuxFxVersion}\" --output table \n \n *Running on Elastic Premium and App Service Plans \n \n Linux* Function Apps on a specific language stack version: Ex: Node.js 18 \n \n az functionapp list --query \"[?siteConfig.linuxFxVersion=='Node|18'].{Name:name, ResourceGroup:resourceGroup, OS: 'Linux', LinuxFxVersion:siteConfig.linuxFxVersion}\" --output table \n \n *Running on Elastic Premium and App Service Plans \n \n Windows Function Apps only: \n \n az functionapp list --query \"[?!contains(kind, 'linux')].{Name:name, ResourceGroup:resourceGroup, OS:'Windows'}\" --output table \n \n \n Windows Function Apps with their language stack versions: \n \n az functionapp list --query \"[?!contains(kind, 'linux')].{name: name, resourceGroup: resourceGroup}\" -o json | ConvertFrom-Json | ForEach-Object { \n $appSettings = az functionapp config appsettings list -n $_.name -g $_.resourceGroup --query \"[?name=='FUNCTIONS_WORKER_RUNTIME' || name=='WEBSITE_NODE_DEFAULT_VERSION']\" -o json | ConvertFrom-Json \n $siteConfig = az functionapp config show -n $_.name -g $_.resourceGroup --query \"{powerShellVersion: powerShellVersion, netFrameworkVersion: netFrameworkVersion, javaVersion: javaVersion}\" -o json | ConvertFrom-Json \n \n $runtime = ($appSettings | Where-Object { $_.name -eq 'FUNCTIONS_WORKER_RUNTIME' }).value \n $version = switch($runtime) { \n 'node' { ($appSettings | Where-Object { $_.name -eq 'WEBSITE_NODE_DEFAULT_VERSION' }).value } \n 'powershell' { $siteConfig.powerShellVersion } \n 'dotnet' { $siteConfig.netFrameworkVersion } \n 'java' { $siteConfig.javaVersion } \n default { 'Unknown' } \n } \n \n [PSCustomObject]@{ \n Name = $_.name \n ResourceGroup = $_.resourceGroup \n OS = 'Windows' \n Runtime = $runtime \n Version = $version \n } \n } | Format-Table -AutoSize \n \n \n Windows Function Apps running on Node.js runtime: \n \n az functionapp list --query \"[?!contains(kind, 'linux')].{name: name, resourceGroup: resourceGroup}\" -o json | ConvertFrom-Json | ForEach-Object { \n $appSettings = az functionapp config appsettings list -n $_.name -g $_.resourceGroup --query \"[?name=='FUNCTIONS_WORKER_RUNTIME' || name=='WEBSITE_NODE_DEFAULT_VERSION']\" -o json | ConvertFrom-Json \n \n $runtime = ($appSettings | Where-Object { $_.name -eq 'FUNCTIONS_WORKER_RUNTIME' }).value \n if ($runtime -eq 'node') { \n $version = ($appSettings | Where-Object { $_.name -eq 'WEBSITE_NODE_DEFAULT_VERSION' }).value \n \n [PSCustomObject]@{ \n Name = $_.name \n ResourceGroup = $_.resourceGroup \n OS = 'Windows' \n Runtime = $runtime \n Version = $version \n } \n } \n } | Format-Table -AutoSize \n \n \n Windows Function Apps running on a specific language version: Ex: Node.js 18 \n \n az functionapp list --query \"[?!contains(kind, 'linux')].{name: name, resourceGroup: resourceGroup}\" -o json | ConvertFrom-Json | ForEach-Object { \n $appSettings = az functionapp config appsettings list -n $_.name -g $_.resourceGroup --query \"[?name=='FUNCTIONS_WORKER_RUNTIME' || name=='WEBSITE_NODE_DEFAULT_VERSION']\" -o json | ConvertFrom-Json \n \n $runtime = ($appSettings | Where-Object { $_.name -eq 'FUNCTIONS_WORKER_RUNTIME' }).value \n $nodeVersion = ($appSettings | Where-Object { $_.name -eq 'WEBSITE_NODE_DEFAULT_VERSION' }).value \n \n if ($runtime -eq 'node' -and $nodeVersion -eq '~18') { \n [PSCustomObject]@{ \n Name = $_.name \n ResourceGroup = $_.resourceGroup \n OS = 'Windows' \n Runtime = $runtime \n Version = $nodeVersion \n } \n } \n } | Format-Table -AutoSize \n \n \n All windows Apps running on unsupported language runtimes: (as of March 2025) \n \n az functionapp list --query \"[?!contains(kind, 'linux')].{name: name, resourceGroup: resourceGroup}\" -o json | ConvertFrom-Json | ForEach-Object { \n $appSettings = az functionapp config appsettings list -n $_.name -g $_.resourceGroup --query \"[?name=='FUNCTIONS_WORKER_RUNTIME' || name=='WEBSITE_NODE_DEFAULT_VERSION']\" -o json | ConvertFrom-Json \n $siteConfig = az functionapp config show -n $_.name -g $_.resourceGroup --query \"{powerShellVersion: powerShellVersion, netFrameworkVersion: netFrameworkVersion}\" -o json | ConvertFrom-Json \n \n $runtime = ($appSettings | Where-Object { $_.name -eq 'FUNCTIONS_WORKER_RUNTIME' }).value \n $version = switch($runtime) { \n 'node' { \n $nodeVer = ($appSettings | Where-Object { $_.name -eq 'WEBSITE_NODE_DEFAULT_VERSION' }).value \n if ([string]::IsNullOrEmpty($nodeVer)) { 'Unknown' } else { $nodeVer } \n } \n 'powershell' { $siteConfig.powerShellVersion } \n 'dotnet' { $siteConfig.netFrameworkVersion } \n default { 'Unknown' } \n } \n \n # Check if runtime version is unsupported \n $isUnsupported = switch($runtime) { \n 'node' { \n $ver = $version -replace '~','' \n [double]$ver -le 16 \n } \n 'powershell' { \n $ver = $version -replace '~','' \n [double]$ver -le 7.2 \n } \n 'dotnet' { \n $ver = $siteConfig.netFrameworkVersion \n $ver -notlike 'v7*' -and $ver -notlike 'v8*' \n } \n default { $false } \n } \n \n if ($isUnsupported) { \n [PSCustomObject]@{ \n Name = $_.name \n ResourceGroup = $_.resourceGroup \n OS = 'Windows' \n Runtime = $runtime \n Version = $version \n } \n } \n } | Format-Table -AutoSize \n \n Take Action Now \n By using these scripts, you can proactively identify and update Function Apps before they reach end-of-support status. Stay ahead of runtime retirements and ensure the reliability of your Function Apps. \n For step-by-step instructions to upgrade your Function Apps, check out the Azure Functions Language version upgrade guide. \n For more details on Azure Functions' language support lifecycle, visit the official documentation. \n Have any questions? Let us know in the comments below! ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"9963","kudosSumWeight":1,"repliesCount":2,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk4MTg3LUZNRFd3SQ?revision=3\"}"}}],"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/bS00Mzk4MTg3LUZNRFd3SQ?revision=3"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"CachedAsset:text:en_US-components/community/Navbar-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1750285382165","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1750285382165","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1750285382165","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1750285382165","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagSubscriptionAction-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagSubscriptionAction-1750285382165","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-shared/client/components/common/QueryHandler-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1750285382165","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1750285382165","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1750285382165","value":{"errorMessage":"Error rendering component id: {customComponentId}","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/MessageListTabs-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListTabs-1750285382165","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-components/messages/MessageView/MessageViewInline-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1750285382165","value":{"loadMore":"Show More"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/OverflowNav-1750285382165","value":{"toggleText":"More"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1750285382165","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1750285382165","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageUnreadCount-1750285382165","value":{"unread":"{count} unread","comments":"{count, plural, one { unread comment} other{ unread comments}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageViewCount-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageViewCount-1750285382165","value":{"textTitle":"{count, plural,one {View} other{Views}}","views":"{count, plural, one{View} other{Views}}"},"localOverride":false},"CachedAsset:text:en_US-components/kudos/KudosCount-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/kudos/KudosCount-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRepliesCount-1750285382165","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-1750285382165":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1750285382165","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false}}}},"page":"/tags/TagPage/TagPage","query":{"nodeId":"board:AppsonAzureBlog","tagName":"java"},"buildId":"cQon2PUqbQU8la6pXifn2","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.3.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","./components/customComponent/CustomComponentContent/HtmlContent.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","./components/customComponent/CustomComponentContent/TemplateContent.tsx","./components/customComponent/CustomComponentContent/CustomComponentScripts.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=TagPage","strategy":"afterInteractive"}]}