> ## Documentation Index
> Fetch the complete documentation index at: https://bazel-pr-30012.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Rules

The Bazel ecosystem has a growing and evolving set of rules to support popular
languages and packages. Much of Bazel's strength comes from the ability to
[define new rules](/versions/8.4.2/extending/concepts) that can be used by others.

This page describes the recommended, native, and non-native Bazel rules.

<h2 id="recommended-rules">
  Recommended rules
</h2>

Here is a selection of recommended rules:

* [Android](/versions/8.4.2/docs/bazel-and-android)
* [C / C++](/versions/8.4.2/docs/bazel-and-cpp)
* [Docker/OCI](https://github.com/bazel-contrib/rules_oci)
* [Go](https://github.com/bazelbuild/rules_go)
* [Haskell](https://github.com/tweag/rules_haskell)
* [Java](/versions/8.4.2/docs/bazel-and-java)
* [JavaScript / NodeJS](https://github.com/bazelbuild/rules_nodejs)
* [Maven dependency management](https://github.com/bazelbuild/rules_jvm_external)
* [Objective-C](/versions/8.4.2/docs/bazel-and-apple)
* [Package building](https://github.com/bazelbuild/rules_pkg)
* [Protocol Buffers](https://github.com/bazelbuild/rules_proto#protobuf-rules-for-bazel)
* [Python](https://github.com/bazelbuild/rules_python)
* [Rust](https://github.com/bazelbuild/rules_rust)
* [Scala](https://github.com/bazelbuild/rules_scala)
* [Shell](/versions/8.4.2/reference/be/shell)
* [Webtesting](https://github.com/bazelbuild/rules_webtesting) (Webdriver)

The repository [Skylib](https://github.com/bazelbuild/bazel-skylib) contains
additional functions that can be useful when writing new rules and new
macros.

The rules above were reviewed and follow our
[requirements for recommended rules](/versions/8.4.2/community/recommended-rules).
Contact the respective rule set's maintainers regarding issues and feature
requests.

To find more Bazel rules, use a search engine, take a look on
[awesomebazel.com](https://awesomebazel.com/), or search on
[GitHub](https://github.com/search?o=desc\&q=bazel+rules\&s=stars\&type=Repositories).

## Native rules that do not apply to a specific programming language

Native rules are shipped with the Bazel binary, they are always available in
BUILD files without a `load` statement.

* Extra actions
  * [`extra_action`](/versions/8.4.2/reference/be/extra-actions#extra_action)
  * [`action_listener`](/versions/8.4.2/reference/be/extra-actions#action_listener)
* General
  * [`filegroup`](/versions/8.4.2/reference/be/general#filegroup)
  * [`genquery`](/versions/8.4.2/reference/be/general#genquery)
  * [`test_suite`](/versions/8.4.2/reference/be/general#test_suite)
  * [`alias`](/versions/8.4.2/reference/be/general#alias)
  * [`config_setting`](/versions/8.4.2/reference/be/general#config_setting)
  * [`genrule`](/versions/8.4.2/reference/be/general#genrule)
* Platform
  * [`constraint_setting`](/versions/8.4.2/reference/be/platforms-and-toolchains#constraint_setting)
  * [`constraint_value`](/versions/8.4.2/reference/be/platforms-and-toolchains#constraint_value)
  * [`platform`](/versions/8.4.2/reference/be/platforms-and-toolchains#platform)
  * [`toolchain`](/versions/8.4.2/reference/be/platforms-and-toolchains#toolchain)
  * [`toolchain_type`](/versions/8.4.2/reference/be/platforms-and-toolchains#toolchain_type)
* Workspace
  * [`bind`](/versions/8.4.2/reference/be/workspace#bind)
  * [`local_repository`](/versions/8.4.2/reference/be/workspace#local_repository)
  * [`new_local_repository`](/versions/8.4.2/reference/be/workspace#new_local_repository)
  * [`xcode_config`](/versions/8.4.2/reference/be/objective-c#xcode_config)
  * [`xcode_version`](/versions/8.4.2/reference/be/objective-c#xcode_version)

<h2 id="embedded-rules">
  Embedded non-native rules
</h2>

Bazel also embeds additional rules written in [Starlark](/versions/8.4.2/rules/language). Those can be loaded from
the `@bazel_tools` built-in external repository.

* Repository rules
  * [`git_repository`](/versions/8.4.2/rules/lib/repo/git#git_repository)
  * [`http_archive`](/versions/8.4.2/rules/lib/repo/http#http_archive)
  * [`http_file`](/versions/8.4.2/rules/lib/repo/http#http_archive)
  * [`http_jar`](/versions/8.4.2/rules/lib/repo/http#http_jar)
  * [Utility functions on patching](/versions/8.4.2/rules/lib/repo/utils)
