#if (!$singlePage)
---
layout: documentation
title: Build Encyclopedia
---
#end
#if (!$singlePage)
#parse("com/google/devtools/build/docgen/templates/be/header.vm")
#end

<h1>Bazel BUILD Encyclopedia of Functions</h1>
<h2>Contents</h2>

<h3>Concepts and terminology</h3>

<ul>
  <li>
    <a href="$expander.expandRef("common-definitions")">Common definitions</a>
    <ul>
      <li><a href="$expander.expandRef("common-definitions#sh-tokenization")">Bourne shell tokenization</a></li>
      <li><a href="$expander.expandRef("common-definitions#label-expansion")">Label expansion</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes")">Common attributes</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes-tests")">Common attributes for tests</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes-binaries")">Common attributes for binaries</a></li>
      <li><a href="$expander.expandRef("common-definitions#configurable-attributes")">Configurable attributes</a></li>
      <li><a href="$expander.expandRef("common-definitions#implicit-outputs")">Implicit output targets</a></li>
    </ul>
  </li>
  <li>
    <a href="$expander.expandRef("make-variables")">"Make" variables</a>
    <ul class="be-toc">
      <li><a href="$expander.expandRef("make-variables#make-var-substitution")">"Make" variable substitution</a></li>

    </ul>
  </li>
</ul>

<h3>Functions</h3>

<ul class="be-toc">
  <li><a href="$expander.expandRef("package")">package</a></li>
  <li><a href="$expander.expandRef("package_group")">package_group</a></li>

  <li><a href="$expander.expandRef("licenses")">licenses</a></li>
  <li><a href="$expander.expandRef("exports_files")">exports_files</a></li>
  <li><a href="$expander.expandRef("glob")">glob</a></li>
  <li><a href="$expander.expandRef("select")">select</a></li>
  <li><a href="$expander.expandRef("workspace")">workspace</a></li>
</ul>

<h3>Rules</h3>

Native rules ship with the Bazel binary and do not require a <code>load</code> statement.
Native rules are available globally in BUILD files. In .bzl files, you can find them in
the <code>native</code> module.

<h4>Language-specific native rules</h4>

#macro(summaryLink $page $heading)
  #if ($singlePage)#${heading}#else${page}.html#${heading}#end
#end

#macro(summaryTable $ruleFamilies)
  <tbody>
  #foreach($ruleFamily in $ruleFamilies)
    #if($ruleFamily.size() > 0)
      <tr>
        <td class="lang">${ruleFamily.name}</td>
        <td>
      #foreach($ruleDoc in $ruleFamily.binaryRules)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>
            ${ruleDoc.ruleName}
          </a>
          <br />
      #end
        </td>
        <td>
      #foreach($ruleDoc in $ruleFamily.libraryRules)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>
            ${ruleDoc.ruleName}
          </a>
          <br />
      #end
        </td>
        <td>
      #foreach($ruleDoc in $ruleFamily.testRules)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>
            ${ruleDoc.ruleName}
          </a>
          <br />
      #end
        </td>
        <td>
      #foreach($ruleDoc in $ruleFamily.otherRules1)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>
            ${ruleDoc.ruleName}
          </a>
          <br />
      #end
        </td>
        <td>
      #foreach($ruleDoc in $ruleFamily.otherRules2)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>
            ${ruleDoc.ruleName}
          </a>
          <br />
      #end
        </td>
      </tr>
    #end
  #end
  </tbody>
#end

<table class="table table-condensed table-striped" summary="Table of rules sorted by language">
  <colgroup span="6" width="20%"></colgroup>
  <thead>
    <tr>
      <th>Language</th>
      <th>Binary rules</th>
      <th>Library rules</th>
      <th>Test rules</th>
      <th>Other rules</th>
      <th></th>
    </tr>
  </thead>
#summaryTable($langSpecificRuleFamilies)

</table>
<h4>Native rules that do not apply to a specific programming language</h4>

<table class="table table-condensed table-striped" summary="Table of rules not specific to a programming language">
  <colgroup span="6" width="20%"></colgroup>
#summaryTable($genericRuleFamilies)

</table>

<h4>Additional rules</h4>

<p>Non-native rules extend Bazel's capabilities. Rules for many popular languages
have been created and are being maintained outside of Bazel. Contact the respective
rule set's maintainers regarding issues and feature requests.</p>

<p>To find more Bazel rules, use a search engine or look on
<a href="https://github.com/search?o=desc&q=bazel+rules&s=stars&type=Repositories">GitHub</a>.
</p>

<p>Here is a selection of popular rules:</p>

<ul>
  <li><a href="https://github.com/bazelbuild/rules_android">Android</a></li>
  <li><a href="https://github.com/bazelbuild/rules_apple">Apple platforms</a></li>
  <li><a href="https://github.com/nelhage/rules_boost">Boost</a></li>
  <li><a href="https://github.com/bazelbuild/rules_dotnet">C#</a></li>
  <li><a href="https://github.com/bazelbuild/rules_closure">Closure</a></li>
  <li><a href="https://github.com/bazelbuild/rules_docker">Docker</a></li>
  <li><a href="https://github.com/bazelbuild/rules_go">Go</a></li>
  <li><a href="https://github.com/tweag/rules_haskell">Haskell</a></li>
  <li><a href="https://github.com/bazelbuild/rules_jsonnet">Jsonnet</a></li>
  <li><a href="https://github.com/bazelbuild/rules_kotlin">Kotlin</a></li>
  <li><a href="https://github.com/bazelbuild/rules_k8s">Kubernetes</a></li>
  <li><a href="https://github.com/bazelbuild/rules_nodejs">NodeJS</a></li>
  <li><a href="https://github.com/pubref/rules_protobuf">Protobuf</a></li>
  <li><a href="https://github.com/bazelbuild/rules_python">Python</a></li>
  <li><a href="https://github.com/bazelbuild/rules_rust">Rust</a></li>
  <li><a href="https://github.com/bazelbuild/rules_scala">Scala</a></li>
  <li><a href="https://github.com/bazelbuild/rules_swift">Swift</a></li>
  <li><a href="https://github.com/bazelbuild/rules_typescript">Typescript</a></li>
  <li><a href="https://github.com/bazelbuild/rules_webtesting">Webtesting</a> (Webdriver)</li>
</ul>

<p>The repository
<a href="https://github.com/bazelbuild/bazel-skylib">Skylib</a>
contains additional functions that can be useful when writing new rules
and new macros.</p>

#if (!$singlePage)
#parse("com/google/devtools/build/docgen/templates/be/footer.vm")
#end
