{"id":95249,"date":"2026-04-14T09:00:14","date_gmt":"2026-04-14T16:00:14","guid":{"rendered":"https:\/\/github.blog\/changelog\/2026-04-13-sbom-exports-are-now-computed-asynchronously"},"modified":"2026-04-14T08:56:29","modified_gmt":"2026-04-14T15:56:29","slug":"sbom-exports-are-now-computed-asynchronously","status":"publish","type":[3522],"link":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously","title":{"rendered":"SBOM exports are now computed asynchronously"},"content":{"rendered":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><p>Software Bill of Materials (SBOM) exports from repository pages and new API endpoints are now asynchronous operations. Previously, navigating to a repository&rsquo;s dependency graph page and clicking the <strong>Export SBOM<\/strong> button, or requesting an SBOM from the <code>\/repos\/{owner}\/{repo}\/dependency-graph\/sbom<\/code> REST API had a hard-coded timeout value of ten seconds. This worked for most cases, but large repositories with complex dependency trees could often take longer to process. Further, multiple requests would spawn multiple independent back-end workers, with no guarantee that any would complete.<\/p>\n<h2 id=\"download-sboms-in-your-browser\" id=\"download-sboms-in-your-browser\" ><a class=\"heading-link\" href=\"#download-sboms-in-your-browser\">Download SBOMs in your browser<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Now, there&rsquo;s a new web experience which polls for job completion and new API endpoints to match. These work asynchronously, eliminating timeouts. To use the new UI, navigate to a repository&rsquo;s <strong>Insights<\/strong> tab, click <strong>Dependency Graph<\/strong>, then click <strong>Export SBOM<\/strong>. Once the file is ready, you&rsquo;ll be able to download it from this page.<\/p>\n<h2 id=\"api-access-to-sboms\" id=\"api-access-to-sboms\" ><a class=\"heading-link\" href=\"#api-access-to-sboms\">API access to SBOMs<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>For API access, there are two new endpoints which work together to provide asynchronous access to SBOMs:<\/p>\n<ul>\n<li><code>GET \/repos\/{owner}\/{repo}\/dependency-graph\/sbom\/generate-report<\/code>: This returns a URL containing a unique identifier, <code>{sbom-uuid}<\/code>, indicating the service has started working on the request.\n<\/li>\n<li>\n<p><code>GET \/repos\/{owner}\/{repo}\/dependency-graph\/sbom\/fetch-report\/{sbom-uuid}<\/code>: This returns a 201 until the report is ready for download, at which point it will perform a 302 redirect to the actual contents of the SBOM.<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"limitations-and-caveats\" id=\"limitations-and-caveats\" ><a class=\"heading-link\" href=\"#limitations-and-caveats\">Limitations and caveats<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<ul>\n<li>\n<p>Similar to the previous behavior, the SBOM export represents the state of the repository at the time you initiate the request. SBOMs are not available for refs other than HEAD.<\/p>\n<\/li>\n<li>\n<p>Anonymous users are restricted to one concurrent SBOM request per repository. Logged-in users are not subject to this restriction.<\/p>\n<\/li>\n<\/ul>\n<p>Join the discussion within <a href=\"https:\/\/github.com\/orgs\/community\/discussions\/categories\/announcements\">GitHub Community<\/a>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/39e105e0-5405-4363-a8bf-9b72a3772279\" alt=\"social\"><\/p>\n<\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>Software Bill of Materials (SBOM) exports from repository pages and new API endpoints are now asynchronous operations. Previously, navigating to a repository&rsquo;s dependency graph page and clicking the Export SBOM&hellip;<\/p>\n","protected":false},"author":2106,"featured_media":95250,"template":"","meta":{"_gh_post_show_toc":"","_gh_post_is_no_robots":"","_gh_post_is_featured":"","_gh_post_is_excluded":"","_gh_post_is_unlisted":"","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"","_gh_post_sq_img_id":"","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"","_gh_post_recirc_hide":"","_gh_post_recirc_col_1":"","_gh_post_recirc_col_2":"","_gh_post_recirc_col_3":"","_gh_post_recirc_col_4":"","_featured_video":"","_gh_post_additional_query_params":"","footnotes":"","_links_to":"","_links_to_target":"","primary_cta":"","primary_cta_url":"","secondary_cta":"","secondary_cta_url":""},"label":[3630],"group":[3833],"coauthors":[3100],"class_list":["post-95249","changelog","type-changelog","status-publish","has-post-thumbnail","hentry","changelog-type-improvements","changelog-label-supply-chain-security","changelog-group-04-2026"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SBOM exports are now computed asynchronously - GitHub Changelog<\/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:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SBOM exports are now computed asynchronously \u00b7 GitHub Changelog\" \/>\n<meta property=\"og:description\" content=\"Software Bill of Materials (SBOM) exports from repository pages and new API endpoints are now asynchronous operations. Previously, navigating to a repository&rsquo;s dependency graph page and clicking the Export SBOM&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2026\/04\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data2\" content=\"Allison\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/\",\"name\":\"SBOM exports are now computed asynchronously - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260\",\"datePublished\":\"2026-04-14T16:00:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260\",\"width\":2400,\"height\":1260,\"caption\":\"A Dependency graph page with a Download SBOM button for the octocats\\\/goggle-shop repository.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/changelog\\\/2026-04-14-sbom-exports-are-now-computed-asynchronously\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Changelogs\",\"item\":\"https:\\\/\\\/github.blog\\\/changelog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SBOM exports are now computed asynchronously\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SBOM exports are now computed asynchronously - GitHub Changelog","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:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/","og_locale":"en_US","og_type":"article","og_title":"SBOM exports are now computed asynchronously \u00b7 GitHub Changelog","og_description":"Software Bill of Materials (SBOM) exports from repository pages and new API endpoints are now asynchronous operations. Previously, navigating to a repository&rsquo;s dependency graph page and clicking the Export SBOM&hellip;","og_url":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/","og_site_name":"The GitHub Blog","og_image":[{"width":2400,"height":1260,"url":"https:\/\/github.blog\/wp-content\/uploads\/2026\/04\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes","Written by":"Allison"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/","url":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/","name":"SBOM exports are now computed asynchronously - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2026\/04\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260","datePublished":"2026-04-14T16:00:14+00:00","breadcrumb":{"@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2026\/04\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2026\/04\/575612234-1a5432cf-6bb4-47bd-96b3-2814924557f3.jpeg?fit=2400%2C1260","width":2400,"height":1260,"caption":"A Dependency graph page with a Download SBOM button for the octocats\/goggle-shop repository."},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/changelog\/2026-04-14-sbom-exports-are-now-computed-asynchronously\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"Changelogs","item":"https:\/\/github.blog\/changelog\/"},{"@type":"ListItem","position":3,"name":"SBOM exports are now computed asynchronously"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/changelogs\/95249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/changelogs"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/changelog"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/2106"}],"version-history":[{"count":2,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/changelogs\/95249\/revisions"}],"predecessor-version":[{"id":95255,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/changelogs\/95249\/revisions\/95255"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/95250"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=95249"}],"wp:term":[{"taxonomy":"changelog-type","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/type?post=95249"},{"taxonomy":"changelog-label","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/label?post=95249"},{"taxonomy":"changelog-group","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/group?post=95249"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=95249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}