{"id":74204,"date":"2018-12-04T09:30:28","date_gmt":"2018-12-04T17:30:28","guid":{"rendered":"https:\/\/open.microsoft.com\/?p=74204"},"modified":"2025-06-30T00:02:37","modified_gmt":"2025-06-30T07:02:37","slug":"announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/","title":{"rendered":"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications"},"content":{"rendered":"\n<p>\u201cThe day of the distributed app is near.\u201d That is the mantra we\u2019ve been repeating for years. But with robust cloud offerings, the microservice pattern, orchestration platforms like Kubernetes, and the REST-ification of everything, we\u2019re already there. It <em>is<\/em> the day of the distributed application. Almost. We\u2019ve gotten the \u201cdistributed\u201d thing down, but in doing so, we may have neglected the \u201capplication\u201d part. And that\u2019s where CNAB \u2013 Cloud Native Application Bundles \u2013 comes in.<\/p>\n\n\n\n<p>When we talk about distributed applications, we are referring to an architecture for building applications using the rich array of cloud services and\/or on-premises resources at our disposal. But distributed applications introduce a layer of complexity, using numerous resources, tracking different versions, and managing multiple environments. If we want to treat a distributed application <em>as a single app<\/em>, there are three distinct pain points we need to address:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>We need to be able to <strong>describe<\/strong> our application as a single artifact, even when it is composed of a variety of cloud technologies;<\/li>\n\n\n\n<li>We must be able to <strong>provision<\/strong> our applications without having to master dozens of tools; and<\/li>\n\n\n\n<li>We need to <strong>manage lifecycle<\/strong> (particularly installation, upgrade, and deletion) of our applications.<\/li>\n<\/ol>\n\n\n\n<p>We partnered with Docker to solve these problems for ISVs and enterprises. And today we are excited to announce CNAB: Cloud Native Application Bundles, a new open source <em>package format specification<\/em> created in close partnership with Docker and broadly supported by HashiCorp, Bitnami and more. With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.<\/p>\n\n\n\n<p>CNAB relies on a handful of technologies you are already familiar with \u2013 JSON, Docker containers, and OpenPGP \u2013 and describes a format for packaging, installing, and managing distributed applications. By design, it is cloud agnostic. It works with everything from Azure to on-prem OpenStack, from Kubernetes to Swarm, and from Ansible to Terraform. It can execute on a workstation, a public cloud, an air-gapped network, or a constrained IoT environment. And it is flexible enough to accommodate an array of platform needs, from customer-facing marketplaces to internal build pipelines.<\/p>\n\n\n\n<p>Broadly, CNAB brings several features that aren\u2019t currently in the ecosystem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manage discrete resources as a single logical unit that comprises an app.<\/li>\n\n\n\n<li>Use and define operational verbs for lifecycle management of an app (install, upgrade, uninstall).<\/li>\n\n\n\n<li>Sign and digitally verify a bundle, even when the underlying technology doesn\u2019t natively support it.<\/li>\n\n\n\n<li>Attest (or attach a signature to any moment in the lifecycle of that bundle) and digitally verify that the bundle has achieved that state to control how the bundle can be used.<\/li>\n\n\n\n<li>Enable the export of the bundle and all dependencies to reliably reproduce in another environment, including offline environments (IoT edge, air-gapped environments).<\/li>\n\n\n\n<li>Store bundles in repositories for remote installation.<\/li>\n<\/ul>\n\n\n\n<p>While CNAB is a specification, we wanted to simultaneously demonstrate how it works by providing tools to get you started. We\u2019re excited to announce <a href=\"https:\/\/duffle.sh\">Duffle<\/a>&nbsp;\u2013 an open source reference implementation of a CNAB client. Duffle provides all the core capabilities for working with CNAB. It can install, upgrade, and uninstall CNAB bundles. It can create new bundles, cryptographically sign them, and verify their integrity. And as a reference implementation, it provides an example of how you can build CNAB-based solutions.<\/p>\n\n\n\n<p>To ease the process of building and hosting CNAB bundles, we\u2019re also releasing a VS Code extension. And to top it all off, we\u2019ve written a graphical installer that can turn a bundle installation into a simple point-and-click experience!<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-1024x757.webp\" alt=\"a screenshot of a social media post\" class=\"wp-image-74752 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-1024x757.webp 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-300x222.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-768x568.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-1536x1136.webp 1536w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-2048x1514.webp 2048w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-330x244.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-800x592.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-400x296.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/12\/duffle-1024x757.webp\"><\/figure>\n\n\n\n<p>With this combination of specification and tooling, we\u2019re optimistic that you can get started with CNAB today. Whether you\u2019re focused on running your own apps for your own cloud platform, writing applications for air-gapped networks, or planning to distribute your application to a wide variety of cloud environments, CNAB is a packaging format that can help.<\/p>\n\n\n\n<p>To drive CNAB forward in the industry, our ecosystem of partners \u2013 Docker, HashiCorp, and Bitnami \u2013 are going to offer standardized content (CNAB bundles) that customers would be able to host or download from a CNAB&nbsp;compliant destination such as DockerHub, GitHub, etc.<\/p>\n\n\n\n<p>We would love to have you be part of this journey! Take a look at the specification (<a href=\"https:\/\/cnab.io\">https:\/\/cnab.io<\/a>) to learn in depth, or get started quickly with Duffle (<a href=\"https:\/\/duffle.sh\">https:\/\/duffle.sh<\/a>)<\/p>\n\n\n\n<p>And if you are in the Seattle area on December 10, join us for a hands-on workshop with Docker. You can learn more and register <a href=\"https:\/\/open.microsoft.com\/2018\/11\/21\/microsoft-pre-kubecon-community-workshops\/\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u201cThe day of the distributed app is near.\u201d That is the mantra we\u2019ve been repeating for years. But with robust cloud offerings, the microservice pattern, orchestration platforms like Kubernetes, and the REST-ification of everything, we\u2019re already there. It is the day of the distributed application. Almost.<\/p>\n","protected":false},"author":5562,"featured_media":95490,"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":[158],"content-type":[346],"topic":[2241,2242],"programming-languages":[],"coauthors":[687],"class_list":["post-74204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-kubernetes","content-type-news","topic-cloud","topic-containers","review-flag-1593580428-734","review-flag-and-o-1593580423-446","review-flag-bundl-1593580256-792","review-flag-bundl-1593580260-199","review-flag-iot-1680213327-385","review-flag-new-1593580248-669","review-flag-on-pr-1593580811-9","review-flag-partn-1593580279-545"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications<\/title>\n<meta name=\"description\" content=\"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.\" \/>\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\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications\" \/>\n<meta property=\"og:description\" content=\"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-04T17:30:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-30T07:02:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.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=\"Matt Butcher\" \/>\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=\"Matt Butcher\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 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\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/matt-butcher\/\",\"@type\":\"Person\",\"@name\":\"Matt Butcher\"}],\"headline\":\"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications\",\"datePublished\":\"2018-12-04T17:30:28+00:00\",\"dateModified\":\"2025-06-30T07:02:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\"},\"wordCount\":771,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp\",\"keywords\":[\"Kubernetes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\",\"name\":\"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp\",\"datePublished\":\"2018-12-04T17:30:28+00:00\",\"dateModified\":\"2025-06-30T07:02:37+00:00\",\"description\":\"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications\"}]},{\"@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 CNAB: a cloud-agnostic format for packaging and running distributed applications","description":"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.","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\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/","og_locale":"en_US","og_type":"article","og_title":"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications","og_description":"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2018-12-04T17:30:28+00:00","article_modified_time":"2025-06-30T07:02:37+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.png","type":"image\/png"}],"author":"Matt Butcher","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Matt Butcher","Est. reading time":"3 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/matt-butcher\/","@type":"Person","@name":"Matt Butcher"}],"headline":"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications","datePublished":"2018-12-04T17:30:28+00:00","dateModified":"2025-06-30T07:02:37+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/"},"wordCount":771,"commentCount":2,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp","keywords":["Kubernetes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/","url":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/","name":"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp","datePublished":"2018-12-04T17:30:28+00:00","dateModified":"2025-06-30T07:02:37+00:00","description":"With CNAB, you can manage distributed applications using a single installable file, reliably provision application resources in different environments, and easily manage the application lifecycle without having to use multiple toolsets.","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/STB13_Rick_03.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/12\/04\/announcing-cnab-cloud-agnostic-format-packaging-running-distributed-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing CNAB: a cloud-agnostic format for packaging and running distributed applications"}]},{"@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\/74204","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=74204"}],"version-history":[{"count":2,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/74204\/revisions"}],"predecessor-version":[{"id":97835,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/74204\/revisions\/97835"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95490"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=74204"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=74204"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=74204"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=74204"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=74204"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=74204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}