CINXE.COM

Visibility  |  Bazel

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Bazel"> <meta property="og:type" content="website"><meta name="theme-color" content="#0c713a"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/bazel/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/favicon-prod.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/touchicon-180.png"><link rel="canonical" href="https://bazel.build/versions/6.5.0/concepts/visibility"><link rel="search" type="application/opensearchdescription+xml" title="Bazel" href="https://bazel.build/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://bazel.build/versions/6.5.0/concepts/visibility" /><link rel="alternate" hreflang="x-default" href="https://bazel.build/versions/6.5.0/concepts/visibility" /><link rel="alternate" hreflang="zh-Hans" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=zh-tw" /><link rel="alternate" hreflang="hi" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=hi" /><link rel="alternate" hreflang="id" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=id" /><link rel="alternate" hreflang="ja" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=ja" /><link rel="alternate" hreflang="ko" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=ko" /><link rel="alternate" hreflang="pt-BR" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=pt-br" /><link rel="alternate" hreflang="es-419" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=es-419" /><link rel="alternate" hreflang="th" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=th" /><link rel="alternate" hreflang="tr" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=tr" /><link rel="alternate" hreflang="vi" href="https://bazel.build/versions/6.5.0/concepts/visibility?hl=vi" /><link rel="alternate" hreflang="en-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility" /><link rel="alternate" hreflang="x-default" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility" /><link rel="alternate" hreflang="zh-Hans-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=zh-tw" /><link rel="alternate" hreflang="hi-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=hi" /><link rel="alternate" hreflang="id-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=id" /><link rel="alternate" hreflang="ja-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=ja" /><link rel="alternate" hreflang="ko-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=ko" /><link rel="alternate" hreflang="pt-BR-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=pt-br" /><link rel="alternate" hreflang="es-419-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=es-419" /><link rel="alternate" hreflang="th-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=th" /><link rel="alternate" hreflang="tr-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=tr" /><link rel="alternate" hreflang="vi-cn" href="https://bazel.google.cn/versions/6.5.0/concepts/visibility?hl=vi" /><title>Visibility &nbsp;|&nbsp; Bazel</title> <meta property="og:title" content="Visibility &nbsp;|&nbsp; Bazel"><meta property="og:url" content="https://bazel.build/versions/6.5.0/concepts/visibility"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Visibility" } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="bazel-theme" type="article" layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="bazel" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/lockup.svg" class="devsite-site-logo" alt="Bazel"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://bazel.build/versions/6.5.0/about" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/about" track-type="nav" track-metadata-position="nav - about bazel" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: About Bazel" track-name="about bazel" > About Bazel </a> </tab> <tab class="devsite-active"> <a href="https://bazel.build/versions/6.5.0/start" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/start" track-type="nav" track-metadata-position="nav - getting started" track-metadata-module="primary nav" aria-label="Getting started, selected" data-category="Site-Wide Custom Events" data-label="Tab: Getting started" track-name="getting started" > Getting started </a> </tab> <tab > <a href="https://bazel.build/versions/6.5.0/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/docs" track-type="nav" track-metadata-position="nav - user guide" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: User guide" track-name="user guide" > User guide </a> </tab> <tab > <a href="https://bazel.build/versions/6.5.0/reference" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/reference" track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://bazel.build/versions/6.5.0/extending" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/extending" track-type="nav" track-metadata-position="nav - extending" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Extending" track-name="extending" > Extending </a> </tab> <tab > <a href="https://bazel.build/versions/6.5.0/community" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/community" track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> </tab> <tab class="devsite-dropdown "> <a href="https://bazel.build/versions" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions" track-type="nav" track-metadata-position="nav - versioned docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" > Versioned docs </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Versioned docs" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions" track-metadata-position="nav - versioned docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/8.1.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/8.1.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 8.1 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/8.0.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/8.0.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 8.0 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.4.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.4.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.4 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.0.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.0.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.0 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/6.5.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/6.5.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 6.5 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" track-type="nav" track-metadata-eventdetail="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 5.4.1 </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://bazel.build/" track-type="nav" track-metadata-eventdetail="https://bazel.build/" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Nightly </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> More… </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Bazel" tenant-name="Bazel" > <form class="devsite-search-form" action="https://bazel.build/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//github.com/bazelbuild/bazel/" data-category="Site-Wide Custom Events" data-label="Site header link" > GitHub </a> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://bazel.build/versions/6.5.0/start" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Get started with Bazel quickly </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://bazel.build/versions/6.5.0/install" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/install" track-type="nav" track-metadata-position="nav - install" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Install" track-name="install" > Install </a> </tab> <tab > <a href="https://bazel.build/versions/6.5.0/start/cpp" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/start/cpp" track-type="nav" track-metadata-position="nav - first build tutorials" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: First build tutorials" track-name="first build tutorials" > First build tutorials </a> </tab> <tab class="devsite-active"> <a href="https://bazel.build/versions/6.5.0/concepts/build-ref" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://bazel.build/versions/6.5.0/concepts/build-ref" track-type="nav" track-metadata-position="nav - concepts" track-metadata-module="primary nav" aria-label="Concepts, selected" data-category="Site-Wide Custom Events" data-label="Tab: Concepts" track-name="concepts" > Concepts </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="bazel" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/lockup.svg" class="devsite-site-logo" alt="Bazel"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/versions/6.5.0/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: About Bazel" track-name="about bazel" data-category="Site-Wide Custom Events" data-label="Responsive Tab: About Bazel" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About Bazel </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/start" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Getting started" track-name="getting started" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Getting started" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Getting started </span> </a> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/versions/6.5.0/install" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Install" track-name="install" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Install" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Install </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/start/cpp" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: First build tutorials" track-name="first build tutorials" data-category="Site-Wide Custom Events" data-label="Responsive Tab: First build tutorials" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > First build tutorials </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/concepts/build-ref" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Concepts" track-name="concepts" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Concepts" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Concepts </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: User guide" track-name="user guide" data-category="Site-Wide Custom Events" data-label="Responsive Tab: User guide" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > User guide </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/extending" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Extending" track-name="extending" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extending" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extending </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0/community" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Versioned docs" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Versioned docs </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" > <span class="devsite-nav-text" tooltip menu="Versioned docs"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Versioned docs"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="//github.com/bazelbuild/bazel/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: GitHub" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > GitHub </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/build-ref" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/build-ref" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/build-ref" ><span class="devsite-nav-text" tooltip>Workspaces, packages, &amp; targets</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/labels" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/labels" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/labels" ><span class="devsite-nav-text" tooltip>Labels</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/build-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/build-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/build-files" ><span class="devsite-nav-text" tooltip>BUILD files</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/dependencies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/dependencies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/dependencies" ><span class="devsite-nav-text" tooltip>Dependencies</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/visibility" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/visibility" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/visibility" ><span class="devsite-nav-text" tooltip>Visibility</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/platforms" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/platforms" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/platforms" ><span class="devsite-nav-text" tooltip>Platforms</span></a></li> <li class="devsite-nav-item"><a href="/versions/6.5.0/concepts/hermeticity" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/6.5.0/concepts/hermeticity" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/6.5.0/concepts/hermeticity" ><span class="devsite-nav-text" tooltip>Hermeticity</span></a></li> </ul> <ul class="devsite-nav-list" menu="Versioned docs" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/versions/8.1.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 8.1" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 8.1 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/8.0.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 8.0" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 8.0 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.4.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.4" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.4 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.0" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.0 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 6.5" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 6.5 </span> </a> </li> <li class="devsite-nav-item"> <a href="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 5.4.1" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 5.4.1 </span> </a> </li> <li class="devsite-nav-item"> <a href="/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Nightly" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Nightly </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: More…" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > More… </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://bazel.build/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Bazel" > Bazel </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://bazel.build/versions/6.5.0/start" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Getting started </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://bazel.build/versions/6.5.0/concepts/build-ref" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="" > Concepts </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20250220-r00-rc00.467186075122314759" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/touchicon-180.png" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Visibility </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/issues/new?title=%5Bbazel.build%5D+Problem+with+/versions/6.5.0/concepts/visibility&template=doc_issue.yml&link=https%3A%2F%2Fbazel.build/versions/6.5.0/concepts/visibility" target="_blank"> Report an issue<span class="material-icons icon-after" aria-hidden="true" translate="no">open_in_new</span> </a> <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/tree/master/site/en/versions/6.5.0/concepts/visibility.md" target="_blank"> View source<span class="material-icons icon-after" aria-hidden="true" translate="no">open_in_new</span> </a> <span style="float: right; line-height: 36px"> <a href="/concepts/visibility">Nightly</a> <!-- The lines below are updated by //scripts/docs:gen_new_toc --> <!-- BEGIN_VERSION_INDICATOR --> <a href="/versions/8.1.0/concepts/visibility">8.1</a> · <a href="/versions/8.0.0/concepts/visibility">8.0</a> · <a href="/versions/7.5.0/concepts/visibility">7.5</a> · <a href="/versions/7.4.0/concepts/visibility">7.4</a> · <a href="/versions/7.3.0/concepts/visibility">7.3</a> · <a href="/versions/7.2.0/concepts/visibility">7.2</a> <!-- END_VERSION_INDICATOR --> </span> <p/> <p>This page covers Bazel&#39;s two visibility systems: <a href="#target-visibility">target visibility</a> and <a href="#load-visibility">load visibility</a>.</p> <p>Both types of visibility help other developers distinguish between your library&#39;s public API and its implementation details, and help enforce structure as your workspace grows. You can also use visibility when deprecating a public API to allow current users while denying new ones.</p> <h2 id="target-visibility" data-text="Target visibility" tabindex="-1">Target visibility</h2> <p><strong>Target visibility</strong> controls who may depend on your target — that is, who may use your target&#39;s label inside an attribute such as <code translate="no" dir="ltr">deps</code>.</p> <p>A target <code translate="no" dir="ltr">A</code> is visible to a target <code translate="no" dir="ltr">B</code> if they are in the same package, or if <code translate="no" dir="ltr">A</code> grants visibility to <code translate="no" dir="ltr">B</code>&#39;s package. Thus, packages are the unit of granularity for deciding whether or not to allow access. If <code translate="no" dir="ltr">B</code> depends on <code translate="no" dir="ltr">A</code> but <code translate="no" dir="ltr">A</code> is not visible to <code translate="no" dir="ltr">B</code>, then any attempt to build <code translate="no" dir="ltr">B</code> fails during <a href="/versions/6.5.0/reference/glossary#analysis-phase">analysis</a>.</p> <p>Note that granting visibility to a package does not by itself grant visibility to its subpackages. For more details on package and subpackages, see <a href="/versions/6.5.0/concepts/build-ref">Concepts and terminology</a>.</p> <p>For prototyping, you can disable target visibility enforcement by setting the flag <code translate="no" dir="ltr">--check_visibility=false</code>. This should not be done for production usage in submitted code.</p> <p>The primary way to control visibility is with the <a href="/versions/6.5.0/reference/be/common-definitions#common.visibility"><code translate="no" dir="ltr">visibility</code></a> attribute on rule targets. This section describes the format of this attribute, and how to determine a target&#39;s visibility.</p> <h3 id="visibility-specifications" data-text="Visibility specifications" tabindex="-1">Visibility specifications</h3> <p>All rule targets have a <code translate="no" dir="ltr">visibility</code> attribute that takes a list of labels. Each label has one of the following forms. With the exception of the last form, these are just syntactic placeholders that do not correspond to any actual target.</p> <ul> <li><p><code translate="no" dir="ltr">&quot;//visibility:public&quot;</code>: Grants access to all packages. (May not be combined with any other specification.)</p></li> <li><p><code translate="no" dir="ltr">&quot;//visibility:private&quot;</code>: Does not grant any additional access; only targets in this package can use this target. (May not be combined with any other specification.)</p></li> <li><p><code translate="no" dir="ltr">&quot;//foo/bar:__pkg__&quot;</code>: Grants access to <code translate="no" dir="ltr">//foo/bar</code> (but not its subpackages).</p></li> <li><p><code translate="no" dir="ltr">&quot;//foo/bar:__subpackages__&quot;</code>: Grants access <code translate="no" dir="ltr">//foo/bar</code> and all of its direct and indirect subpackages.</p></li> <li><p><code translate="no" dir="ltr">&quot;//some_pkg:my_package_group&quot;</code>: Grants access to all of the packages that are part of the given <a href="/versions/6.5.0/reference/be/functions#package_group"><code translate="no" dir="ltr">package_group</code></a>.</p> <ul> <li>Package groups use a <a href="/versions/6.5.0/reference/be/functions#package_group.packages">different syntax</a> for specifying packages. Within a package group, the forms <code translate="no" dir="ltr">&quot;//foo/bar:__pkg__&quot;</code> and <code translate="no" dir="ltr">&quot;//foo/bar:__subpackages__&quot;</code> are respectively replaced by <code translate="no" dir="ltr">&quot;//foo/bar&quot;</code> and <code translate="no" dir="ltr">&quot;//foo/bar/...&quot;</code>. Likewise, <code translate="no" dir="ltr">&quot;//visibility:public&quot;</code> and <code translate="no" dir="ltr">&quot;//visibility:private&quot;</code> are just <code translate="no" dir="ltr">&quot;public&quot;</code> and <code translate="no" dir="ltr">&quot;private&quot;</code>.</li> </ul></li> </ul> <p>For example, if <code translate="no" dir="ltr">//some/package:mytarget</code> has its <code translate="no" dir="ltr">visibility</code> set to <code translate="no" dir="ltr">[&quot;:__subpackages__&quot;, &quot;//tests:__pkg__&quot;]</code>, then it could be used by any target that is part of the <code translate="no" dir="ltr">//some/package/...</code> source tree, as well as targets defined in <code translate="no" dir="ltr">//tests/BUILD</code>, but not by targets defined in <code translate="no" dir="ltr">//tests/integration/BUILD</code>.</p> <p><strong>Best practice:</strong> To make several targets visible to the same set of packages, use a <code translate="no" dir="ltr">package_group</code> instead of repeating the list in each target&#39;s <code translate="no" dir="ltr">visibility</code> attribute. This increases readability and prevents the lists from getting out of sync.</p> <aside class="note"><strong>Note:</strong><span> The <code translate="no" dir="ltr">visibility</code> attribute may not specify non-<code translate="no" dir="ltr">package_group</code> targets. Doing so triggers a &quot;Label does not refer to a package group&quot; or &quot;Cycle in dependency graph&quot; error.</span></aside> <h3 id="rule-target-visibility" data-text="Rule target visibility" tabindex="-1">Rule target visibility</h3> <p>A rule target&#39;s visibility is:</p> <ol> <li><p>The value of its <code translate="no" dir="ltr">visibility</code> attribute, if set; or else</p></li> <li><p>The value of the <a href="/versions/6.5.0/reference/be/functions#package.default_visibility"><code translate="no" dir="ltr">default_visibility</code></a> argument of the <a href="/versions/6.5.0/reference/be/functions#package"><code translate="no" dir="ltr">package</code></a> statement in the target&#39;s <code translate="no" dir="ltr">BUILD</code> file, if such a declaration exists; or else</p></li> <li><p><code translate="no" dir="ltr">//visibility:private</code>.</p></li> </ol> <p><strong>Best practice:</strong> Avoid setting <code translate="no" dir="ltr">default_visibility</code> to public. It may be convenient for prototyping or in small codebases, but the risk of inadvertently creating public targets increases as the codebase grows. It&#39;s better to be explicit about which targets are part of a package&#39;s public interface.</p> <h4 id="rule-target-visibility-example" data-text="Example" tabindex="-1">Example</h4> <p>File <code translate="no" dir="ltr">//frobber/bin/BUILD</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># This target is visible to everyone</span> <span class="devsite-syntax-n">cc_binary</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"executable"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">visibility</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"//visibility:public"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">deps</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">":library"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># This target is visible only to targets declared in the same package</span> <span class="devsite-syntax-n">cc_library</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"library"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-c1"># No visibility -- defaults to private since no</span> <span class="devsite-syntax-c1"># package(default_visibility = ...) was used.</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># This target is visible to targets in package //object and //noun</span> <span class="devsite-syntax-n">cc_library</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"subject"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">visibility</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span> <span class="devsite-syntax-s2">"//noun:__pkg__"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"//object:__pkg__"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># See package group "//frobber:friends" (below) for who can</span> <span class="devsite-syntax-c1"># access this target.</span> <span class="devsite-syntax-n">cc_library</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"thingy"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">visibility</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"//frobber:friends"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <p>File <code translate="no" dir="ltr">//frobber/BUILD</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># This is the package group declaration to which target</span> <span class="devsite-syntax-c1"># //frobber/bin:thingy refers.</span> <span class="devsite-syntax-c1">#</span> <span class="devsite-syntax-c1"># Our friends are packages //frobber, //fribber and any</span> <span class="devsite-syntax-c1"># subpackage of //fribber.</span> <span class="devsite-syntax-n">package_group</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"friends"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">packages</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span> <span class="devsite-syntax-s2">"//fribber/..."</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"//frobber"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <h3 id="generated-file-target-visibility" data-text="Generated file target visibility" tabindex="-1">Generated file target visibility</h3> <p>A generated file target has the same visibility as the rule target that generates it.</p> <h3 id="source-file-target-visibility" data-text="Source file target visibility" tabindex="-1">Source file target visibility</h3> <p>You can explicitly set the visibility of a source file target by calling <a href="/versions/6.5.0/reference/be/functions#exports_files"><code translate="no" dir="ltr">exports_files</code></a>. When no <code translate="no" dir="ltr">visibility</code> argument is passed to <code translate="no" dir="ltr">exports_files</code>, it makes the visibility public. <code translate="no" dir="ltr">exports_files</code> may not be used to override the visibility of a generated file.</p> <p>For source file targets that do not appear in a call to <code translate="no" dir="ltr">exports_files</code>, the visibility depends on the value of the flag <a href="https://github.com/bazelbuild/bazel/issues/10225" class="external"><code translate="no" dir="ltr">--incompatible_no_implicit_file_export</code></a>:</p> <ul> <li><p>If the flag is set, the visibility is private.</p></li> <li><p>Else, the legacy behavior applies: The visibility is the same as the <code translate="no" dir="ltr">BUILD</code> file&#39;s <code translate="no" dir="ltr">default_visibility</code>, or private if a default visibility is not specified.</p></li> </ul> <p>Avoid relying on the legacy behavior. Always write an <code translate="no" dir="ltr">exports_files</code> declaration whenever a source file target needs non-private visibility.</p> <p><strong>Best practice:</strong> When possible, prefer to expose a rule target rather than a source file. For example, instead of calling <code translate="no" dir="ltr">exports_files</code> on a <code translate="no" dir="ltr">.java</code> file, wrap the file in a non-private <code translate="no" dir="ltr">java_library</code> target. Generally, rule targets should only directly reference source files that live in the same package.</p> <h4 id="source-file-visibility-example" data-text="Example" tabindex="-1">Example</h4> <p>File <code translate="no" dir="ltr">//frobber/data/BUILD</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">exports_files</span><span class="devsite-syntax-p">([</span><span class="devsite-syntax-s2">"readme.txt"</span><span class="devsite-syntax-p">])</span> </code></pre></devsite-code> <p>File <code translate="no" dir="ltr">//frobber/bin/BUILD</code>:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">cc_binary</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"my-program"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">data</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s2">"//frobber/data:readme.txt"</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <h3 id="config-setting-visibility" data-text="Config setting visibility" tabindex="-1">Config setting visibility</h3> <p>Historically, Bazel has not enforced visibility for <a href="/versions/6.5.0/reference/be/general#config_setting"><code translate="no" dir="ltr">config_setting</code></a> targets that are referenced in the keys of a <a href="/versions/6.5.0/reference/be/functions#select"><code translate="no" dir="ltr">select()</code></a>. There are two flags to remove this legacy behavior:</p> <ul> <li><p><a href="https://github.com/bazelbuild/bazel/issues/12932" class="external"><code translate="no" dir="ltr">--incompatible_enforce_config_setting_visibility</code></a> enables visibility checking for these targets. To assist with migration, it also causes any <code translate="no" dir="ltr">config_setting</code> that does not specify a <code translate="no" dir="ltr">visibility</code> to be considered public (regardless of package-level <code translate="no" dir="ltr">default_visibility</code>).</p></li> <li><p><a href="https://github.com/bazelbuild/bazel/issues/12933" class="external"><code translate="no" dir="ltr">--incompatible_config_setting_private_default_visibility</code></a> causes <code translate="no" dir="ltr">config_setting</code>s that do not specify a <code translate="no" dir="ltr">visibility</code> to respect the package&#39;s <code translate="no" dir="ltr">default_visibility</code> and to fallback on private visibility, just like any other rule target. It is a no-op if <code translate="no" dir="ltr">--incompatible_enforce_config_setting_visibility</code> is not set.</p></li> </ul> <p>Avoid relying on the legacy behavior. Any <code translate="no" dir="ltr">config_setting</code> that is intended to be used outside the current package should have an explicit <code translate="no" dir="ltr">visibility</code>, if the package does not already specify a suitable <code translate="no" dir="ltr">default_visibility</code>.</p> <h3 id="package-group-target-visibility" data-text="Package group target visibility" tabindex="-1">Package group target visibility</h3> <p><code translate="no" dir="ltr">package_group</code> targets do not have a <code translate="no" dir="ltr">visibility</code> attribute. They are always publicly visible.</p> <h3 id="visibility-implicit-dependencies" data-text="Visibility of implicit dependencies" tabindex="-1">Visibility of implicit dependencies</h3> <p>Some rules have <a href="/versions/6.5.0/extending/rules#private_attributes_and_implicit_dependencies">implicit dependencies</a> — dependencies that are not spelled out in a <code translate="no" dir="ltr">BUILD</code> file but are inherent to every instance of that rule. For example, a <code translate="no" dir="ltr">cc_library</code> rule might create an implicit dependency from each of its rule targets to an executable target representing a C++ compiler.</p> <p>The visibility of such an implicit dependency is checked with respect to the package containing the <code translate="no" dir="ltr">.bzl</code> file in which the rule (or aspect) is defined. In our example, the C++ compiler could be private so long as it lives in the same package as the definition of the <code translate="no" dir="ltr">cc_library</code> rule. As a fallback, if the implicit dependency is not visible from the definition, it is checked with respect to the <code translate="no" dir="ltr">cc_library</code> target.</p> <p>You can change this behavior by disabling <a href="https://github.com/bazelbuild/proposals/blob/master/designs/2019-10-15-tool-visibility.md" class="external"><code translate="no" dir="ltr">--incompatible_visibility_private_attributes_at_definition</code></a>. When disabled, implicit dependencies are treated like any other dependency. This means that the target being depended on (such as our C++ compiler) must be visible to every instance of the rule. In practice this usually means the target must have public visibility.</p> <p>If you want to restrict the usage of a rule to certain packages, use <a href="#load-visibility">load visibility</a> instead.</p> <h2 id="load-visibility" data-text="Load visibility" tabindex="-1">Load visibility</h2> <p><strong>Load visibility</strong> controls whether a <code translate="no" dir="ltr">.bzl</code> file may be loaded from other <code translate="no" dir="ltr">BUILD</code> or <code translate="no" dir="ltr">.bzl</code> files.</p> <p>In the same way that target visibility protects source code that is encapsulated by targets, load visibility protects build logic that is encapsulated by <code translate="no" dir="ltr">.bzl</code> files. For instance, a <code translate="no" dir="ltr">BUILD</code> file author might wish to factor some repetitive target definitions into a macro in a <code translate="no" dir="ltr">.bzl</code> file. Without the protection of load visibility, they might find their macro reused by other collaborators in the same workspace, so that modifying the macro breaks other teams&#39; builds.</p> <p>Note that a <code translate="no" dir="ltr">.bzl</code> file may or may not have a corresponding source file target. If it does, there is no guarantee that the load visibility and the target visibility coincide. That is, the same <code translate="no" dir="ltr">BUILD</code> file might be able to load the <code translate="no" dir="ltr">.bzl</code> file but not list it in the <code translate="no" dir="ltr">srcs</code> of a <a href="/versions/6.5.0/reference/be/general#filegroup"><code translate="no" dir="ltr">filegroup</code></a>, or vice versa. This can sometimes cause problems for rules that wish to consume <code translate="no" dir="ltr">.bzl</code> files as source code, such as for documentation generation or testing.</p> <p>For prototyping, you may disable load visibility enforcement by setting <code translate="no" dir="ltr">--check_bzl_visibility=false</code>. As with <code translate="no" dir="ltr">--check_visibility=false</code>, this should not be done for submitted code.</p> <p>Load visibility is available as of Bazel 6.0.</p> <h3 id="declaring-load-visibility" data-text="Declaring load visibility" tabindex="-1">Declaring load visibility</h3> <p>To set the load visibility of a <code translate="no" dir="ltr">.bzl</code> file, call the <a href="/versions/6.5.0/rules/lib/globals#visibility"><code translate="no" dir="ltr">visibility()</code></a> function from within the file. The argument to <code translate="no" dir="ltr">visibility()</code> is a list of package specifications, just like the <a href="/versions/6.5.0/reference/be/functions#package_group.packages"><code translate="no" dir="ltr">packages</code></a> attribute of <code translate="no" dir="ltr">package_group</code>. However, <code translate="no" dir="ltr">visibility()</code> does not accept negative package specifications.</p> <p>The call to <code translate="no" dir="ltr">visibility()</code> must only occur once per file, at the top level (not inside a function), and ideally immediately following the <code translate="no" dir="ltr">load()</code> statements.</p> <p>Unlike target visibility, the default load visibility is always public. Files that do not call <code translate="no" dir="ltr">visibility()</code> are always loadable from anywhere in the workspace. It is a good idea to add <code translate="no" dir="ltr">visibility(&quot;private&quot;)</code> to the top of any new <code translate="no" dir="ltr">.bzl</code> file that is not specifically intended for use outside the package.</p> <h3 id="load-visibility-example" data-text="Example" tabindex="-1">Example</h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/internal_defs.bzl</span> <span class="devsite-syntax-c1"># Available to subpackages and to mylib's tests.</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">([</span><span class="devsite-syntax-s2">"//mylib/..."</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"//tests/mylib/..."</span><span class="devsite-syntax-p">])</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">helper</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-o">...</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/rules.bzl</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"helper"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Set visibility explicitly, even though public is the default.</span> <span class="devsite-syntax-c1"># Note the [] can be omitted when there's only one entry.</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"public"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">myrule</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">rule</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">)</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //someclient/BUILD</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"//mylib:rules.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"myrule"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># ok</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"//mylib:internal_defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"helper"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># error</span> <span class="devsite-syntax-o">...</span> </code></pre></devsite-code> <h3 id="load-visibility-practices" data-text="Load visibility practices" tabindex="-1">Load visibility practices</h3> <p>This section describes tips for managing load visibility declarations.</p> <h4 id="factoring-visibilities" data-text="Factoring visibilities" tabindex="-1">Factoring visibilities</h4> <p>When multiple <code translate="no" dir="ltr">.bzl</code> files should have the same visibility, it can be helpful to factor their package specifications into a common list. For example:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/internal_defs.bzl</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"private"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">clients</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span> <span class="devsite-syntax-s2">"//foo"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"//bar/baz/..."</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">]</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/feature_A.bzl</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"clients"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">clients</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-o">...</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/feature_B.bzl</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"clients"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">clients</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-o">...</span> </code></pre></devsite-code> <p>This helps prevent accidental skew between the various <code translate="no" dir="ltr">.bzl</code> files&#39; visibilities. It also is more readable when the <code translate="no" dir="ltr">clients</code> list is large.</p> <h4 id="composing-visibilities" data-text="Composing visibilities" tabindex="-1">Composing visibilities</h4> <p>Sometimes a <code translate="no" dir="ltr">.bzl</code> file might need to be visible to an allowlist that is composed of multiple smaller allowlists. This is analogous to how a <code translate="no" dir="ltr">package_group</code> can incorporate other <code translate="no" dir="ltr">package_group</code>s via its <a href="/versions/6.5.0/reference/be/functions#package_group.includes"><code translate="no" dir="ltr">includes</code></a> attribute.</p> <p>Suppose you are deprecating a widely used macro. You want it to be visible only to existing users and to the packages owned by your own team. You might write:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/macros.bzl</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"our_packages"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"//some_big_client:defs.bzl"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"their_remaining_uses)</span> <span class="devsite-syntax-c1"># List concatenation. Duplicates are fine.</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">our_packages</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-n">their_remaining_uses</span><span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <h4 id="deduplicating-with-package-groups" data-text="Deduplicating with package groups" tabindex="-1">Deduplicating with package groups</h4> <p>Unlike target visibility, you cannot define a load visibility in terms of a <code translate="no" dir="ltr">package_group</code>. If you want to reuse the same allowlist for both target visibility and load visibility, it&#39;s best to move the list of package specifications into a .bzl file, where both kinds of declarations may refer to it. Building off the example in <a href="#factoring-visibilities">Factoring visibilities</a> above, you might write:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/BUILD</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"clients"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">package_group</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s2">"my_pkg_grp"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">packages</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">clients</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">)</span> </code></pre></devsite-code> <p>This only works if the list does not contain any negative package specifications.</p> <h4 id="protecting-individual-symbols" data-text="Protecting individual symbols" tabindex="-1">Protecting individual symbols</h4> <p>Any Starlark symbol whose name begins with an underscore cannot be loaded from another file. This makes it easy to create private symbols, but does not allow you to share these symbols with a limited set of trusted files. On the other hand, load visibility gives you control over what other packages may see your <code translate="no" dir="ltr">.bzl file</code>, but does not allow you to prevent any non-underscored symbol from being loaded.</p> <p>Luckily, you can combine these two features to get fine-grained control.</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/internal_defs.bzl</span> <span class="devsite-syntax-c1"># Can't be public, because internal_helper shouldn't be exposed to the world.</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"private"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Can't be underscore-prefixed, because this is</span> <span class="devsite-syntax-c1"># needed by other .bzl files in mylib.</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">internal_helper</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">public_util</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">...</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-o">...</span> </code></pre></devsite-code><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># //mylib/defs.bzl</span> <span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">":internal_defs"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-s2">"internal_helper"</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">_public_util</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"public_util"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">visibility</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"public"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># internal_helper, as a loaded symbol, is available for use in this file but</span> <span class="devsite-syntax-c1"># can't be imported by clients who load this file.</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-c1"># Re-export public_util from this file by assigning it to a global variable.</span> <span class="devsite-syntax-c1"># We needed to import it under a different name ("_public_util") in order for</span> <span class="devsite-syntax-c1"># this assignment to be legal.</span> <span class="devsite-syntax-n">public_util</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">_public_util</span> </code></pre></devsite-code> <h4 id="bzl-visibility-buildifier-lint" data-text="bzl-visibility Buildifier lint" tabindex="-1">bzl-visibility Buildifier lint</h4> <p>There is a <a href="https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#bzl-visibility">Buildifier lint</a> that provides a warning if users load a file from a directory named <code translate="no" dir="ltr">internal</code> or <code translate="no" dir="ltr">private</code>, when the user&#39;s file is not itself underneath the parent of that directory. This lint predates the load visibility feature and is unnecessary in workspaces where <code translate="no" dir="ltr">.bzl</code> files declare visibilities.</p> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20250220-r00-rc00.467186075122314759" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/touchicon-180.png" > <button> Send feedback </button> </devsite-feedback> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2025-02-13 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20250220-r00-rc00.467186075122314759" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/touchicon-180.png" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-13 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">About</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/community/users" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Who's using Bazel </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/contribute/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Contribute </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/contribute/contribution-policy" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Governance model </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/release" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Release model </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/brand" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Brand guidelines </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Stay connected</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//blog.bazel.build" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/bazelbuild/bazel" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > GitHub </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//twitter.com/bazelbuild" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Twitter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//youtube.com/user/googleOSPO" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > YouTube </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/help" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/bazelbuild/bazel/issues" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Issue tracker </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//slack.bazel.build" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Slack </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/bazel" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Stack Overflow </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{&#34;dimensions&#34;: {&#34;dimension1&#34;: &#34;Signed out&#34;, &#34;dimension5&#34;: false, &#34;dimension3&#34;: &#34;en&#34;, &#34;dimension4&#34;: &#34;en&#34;, &#34;dimension2&#34;: false}, &#34;gaid&#34;: &#34;UA-61082125-3&#34;, &#34;metrics&#34;: {}, &#34;purpose&#34;: 0}]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-GBZW986TQ3&#34;, &#34;purpose&#34;: 0}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-GBZW986TQ3&#34;, &#34;purpose&#34;: 0}], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Bazel&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;bazel&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="PJqhzJuYQqaxYq9fNYunuL+vk1Okg/"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/js/app_loader.js', '[40,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f","https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel","https://bazel-dot-devsite-v2-prod-3p.appspot.com",null,null,["/_pwa/bazel/manifest.json","https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/favicon-prod.png","https://www.gstatic.com/devrel-devsite/prod/vdbb152dfd6ef5e309aa1d261d45f3fd443aed2691cbfba3f9f80f8a4012a0a8f/bazel/images/lockup.svg","https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","bazel.build","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["Cloud__enable_cloudx_ping","Cloud__enable_free_trial_server_call","OnSwitch__enable","Cloud__enable_cloud_dlp_service","Profiles__enable_public_developer_profiles","MiscFeatureFlags__enable_explain_this_code","Experiments__reqs_query_experiments","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_awarding_url","TpcFeatures__enable_unmirrored_page_left_nav","MiscFeatureFlags__enable_firebase_utm","Profiles__enable_profile_collections","DevPro__enable_developer_subscriptions","TpcFeatures__enable_mirror_tenant_redirects","Profiles__enable_completequiz_endpoint","Concierge__enable_pushui","MiscFeatureFlags__enable_project_variables","CloudShell__cloud_code_overflow_menu","Search__enable_dynamic_content_confidential_banner","Profiles__enable_completecodelab_endpoint","Profiles__enable_dashboard_curated_recommendations","Profiles__enable_developer_profiles_callout","Profiles__enable_join_program_group_endpoint","Profiles__enable_complete_playlist_endpoint","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_shell","Search__enable_ai_eligibility_checks","Profiles__enable_page_saving","Cloud__enable_llm_concierge_chat","Profiles__enable_stripe_subscription_management","Analytics__enable_clearcut_logging","MiscFeatureFlags__developers_footer_image","Search__enable_page_map","Cloud__enable_legacy_calculator_redirect","Search__enable_suggestions_from_borg","Profiles__enable_release_notes_notifications","SignIn__enable_refresh_access_tokens","MiscFeatureFlags__developers_footer_dark_image","EngEduTelemetry__enable_engedu_telemetry","BookNav__enable_tenant_cache_key","CloudShell__cloud_shell_button","SignIn__enable_auto_login_multi_account","MiscFeatureFlags__enable_view_transitions","Profiles__enable_recognition_badges","Cloud__enable_cloudx_experiment_ids","SignIn__enable_oauth_multi_account_support","Cloud__enable_cloud_facet_chat","MiscFeatureFlags__enable_variable_operator","MiscFeatureFlags__emergency_css","Profiles__require_profile_eligibility_for_signin"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[40,"bazel","Bazel","bazel.build",null,"bazel-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1,1,1],[1,1,null,1,1]],null,[56,null,null,null,null,null,"/images/lockup.svg",null,null,null,null,1,null,null,null,null,null,null,null,null,null,1,null,null,null,null,[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,7,1,18,20,22,23,29,37,39,40,43],null,[[],[1,1]],[[["UA-61082125-3"],["UA-61082125-4"],null,null,["UA-61082125-5"],null,null,[["G-GBZW986TQ3"],null,null,[["G-GBZW986TQ3",1]]],[["UA-61082125-3",1]],null,[["UA-61082125-5",1]],null,1],[[5,8],[4,5],[3,4],[2,2],[1,1]]],null,4],null,null,1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10