{"id":75076,"date":"2018-12-13T09:00:55","date_gmt":"2018-12-13T17:00:55","guid":{"rendered":"https:\/\/cloudblogs.microsoft.com\/opensource\/?p=75076"},"modified":"2025-06-29T23:42:01","modified_gmt":"2025-06-30T06:42:01","slug":"introducing-ambrosia-new-platform-distributed-applications","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/","title":{"rendered":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle"},"content":{"rendered":"\n<p>Building reliable and performant distributed programs that span cloud machines and devices is a challenging endeavor, but one that more and more developers are required to tackle. Foremost among the challenges is effectively handling restart, reconnection, and recovery to a valid state. This is where <a href=\"https:\/\/aka.ms\/MSR-AMBROSIA\">AMBROSIA<\/a> (Actor-Model-Based Reliable Object System for Internet Applications), a new open source project from Microsoft Research, can help.<\/p>\n\n\n\n<p>Rather than placing the burden on application developers to build fault-tolerance into their systems from scratch, AMBROSIA provides a general-purpose distributed programming platform that automatically handles failure and lets the developer focus on the core logic of their application.<\/p>\n\n\n\n<p>We call this property of AMBROSIA &#8220;virtual resiliency&#8221;. Virtual resiliency is achieved by running your application code in an AMBROSIA immortal (see diagram below), which handles checkpointing, logs all communications going into and out of your application, and writes them to storage. This allows the immortal to automatically recover from a failure by replaying all activity from the most recent checkpoint of the application, and also to seamlessly reconnect to other Ambrosia services. Debugging also becomes simple when you can reproduce failure conditions by simply stepping through logged activity with a debugger.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d.webp\" alt=\"Diagram 1\" class=\"wp-image-75088 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d.webp 816w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-300x191.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-768x489.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-330x210.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-800x510.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-400x255.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d.png 816w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-300x191.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-768x489.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-330x210.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-800x510.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/ambrosia-5c118557dc05d-400x255.png 400w\"><\/figure>\n\n\n\n<p>Furthermore, this approach provides exactly-once semantics for messages between distributed components running as AMBROSIA immortals, and it does this in a performant and cost-effective manner. Though this type of an implementation might at first glance look expensive, we\u2019ve found it to be consistently cheaper to run than other commonly used microservices architectures.<\/p>\n\n\n\n<p>We are excited to launch AMBROSIA as an open source project that can be run on both Windows and Linux. The first release includes support for C#, with planned expansion across other languages.<\/p>\n\n\n\n<p>Check out the project on <a href=\"https:\/\/aka.ms\/MSR-AMBROSIA\">GitHub<\/a> or get started right away with our <a href=\"https:\/\/aka.ms\/AMBROSIA-samples\">samples<\/a> on either Kubernetes or Windows. You can also learn more about AMBROSIA\u2019s implementation and performance in our <a href=\"https:\/\/aka.ms\/AMBROSIA-paper\">whitepaper<\/a>.<\/p>\n\n\n\n<p>Questions? Let us know in the comments.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building reliable and performant distributed programs that span cloud machines and devices is a challenging endeavor, but one that more and more developers are required to tackle. Foremost among the challenges is effectively handling restart, reconnection, and recovery to a valid state.<\/p>\n","protected":false},"author":5562,"featured_media":95492,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[],"content-type":[346],"topic":[2240,2241],"programming-languages":[],"coauthors":[427],"class_list":["post-75076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","content-type-news","topic-application-development","topic-cloud","review-flag-new-1593580248-669"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"Building reliable and performant distributed programs that span cloud machines and devices is a challenging endeavor, but one that more and more developers are required to tackle. Foremost among the challenges is effectively handling restart, reconnection, and recovery to a valid state.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-13T17:00:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-30T06:42:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jonathan Goldstein\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Goldstein\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/jonathan-goldstein\/\",\"@type\":\"Person\",\"@name\":\"Jonathan Goldstein\"}],\"headline\":\"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle\",\"datePublished\":\"2018-12-13T17:00:55+00:00\",\"dateModified\":\"2025-06-30T06:42:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\"},\"wordCount\":333,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\",\"name\":\"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp\",\"datePublished\":\"2018-12-13T17:00:55+00:00\",\"dateModified\":\"2025-06-30T06:42:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/","og_locale":"en_US","og_type":"article","og_title":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog","og_description":"Building reliable and performant distributed programs that span cloud machines and devices is a challenging endeavor, but one that more and more developers are required to tackle. Foremost among the challenges is effectively handling restart, reconnection, and recovery to a valid state.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2018-12-13T17:00:55+00:00","article_modified_time":"2025-06-30T06:42:01+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.png","type":"image\/png"}],"author":"Jonathan Goldstein","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Jonathan Goldstein","Est. reading time":"1 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/jonathan-goldstein\/","@type":"Person","@name":"Jonathan Goldstein"}],"headline":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle","datePublished":"2018-12-13T17:00:55+00:00","dateModified":"2025-06-30T06:42:01+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/"},"wordCount":333,"commentCount":0,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/","url":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/","name":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp","datePublished":"2018-12-13T17:00:55+00:00","dateModified":"2025-06-30T06:42:01+00:00","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/13\/introducing-ambrosia-new-platform-distributed-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing AMBROSIA: a new platform for reliable distributed applications without all the hassle"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/75076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=75076"}],"version-history":[{"count":1,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/75076\/revisions"}],"predecessor-version":[{"id":97825,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/75076\/revisions\/97825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95492"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=75076"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=75076"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=75076"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=75076"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=75076"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=75076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}