---
title: 'Bazel Special Interest Groups'
---



Bazel hosts Special Interest Groups (SIGs) to focus collaboration on particular
areas and to support communication and coordination between [Bazel owners, maintainers, and contributors](/contribute/policy). This policy
applies to [`bazelbuild`](http://github.com/bazelbuild).

SIGs do their work in public. The ideal scope for a SIG covers a well-defined
domain, where the majority of participation is from the community. SIGs may
focus on community maintained repositories in `bazelbuild` (such as language
rules) or focus on areas of code in the Bazel repository (such as Remote
Execution).

While not all SIGs will have the same level of energy, breadth of scope, or
governance models, there should be sufficient evidence that there are community
members willing to engage and contribute should the interest group be
established. Before joining, review the group's work, and then get in touch
with the SIG leader. Membership policies vary on a per-SIG basis.

See the complete list of
[Bazel SIGs](https://github.com/bazelbuild/community/tree/main/sigs).

### Non-goals: What a SIG is not

SIGs are intended to facilitate collaboration on shared work. A SIG is
therefore:

-   *Not a support forum:* a mailing list and a SIG is not the same thing
-   *Not immediately required:* early on in a project's life, you may not know
    if you have shared work or collaborators
-   *Not free labor:* energy is required to grow and coordinate the work
    collaboratively

Bazel Owners take a conservative approach to SIG creation—thanks to the ease of
starting projects on GitHub, there are many avenues where collaboration can
happen without the need for a SIG.

## SIG lifecycle

This section covers how to create a SIG.

### Research and consultation

To propose a new SIG group, first gather evidence for approval, as specified
below. Some possible avenues to consider are:

-   A well-defined problem or set of problems the group would solve
-   Consultation with community members who would benefit, assessing both the
    benefit and their willingness to commit
-   For existing projects, evidence from issues and PRs that contributors care
    about the topic
-   Potential goals for the group to achieve
-   Resource requirements of running the group

Even if the need for a SIG seems self-evident, the research and consultation is
still important to the success of the group.

### Create the new group

The new group should follow the below process for chartering. In particular, it
must demonstrate:

-   A clear purpose and benefit to Bazel (either around a sub-project or
    application area)
-   Two or more contributors willing to act as group leads, existence of other
    contributors, and evidence of demand for the group
-   Each group needs to use at least one publicly accessible mailing list. A SIG
    may reuse one of the public lists, such as
    [bazel-discuss](https://groups.google.com/g/bazel-discuss), ask for a list
    for @bazel.build, or create their own list
-   Resources the SIG initially requires (usually, mailing list and regular
    video call.)
-   SIGs can serve documents and files from their directory in
    [`bazelbuild/community`](https://github.com/bazelbuild/community)
    or from their own repository in the
    [`bazelbuild`](https://github.com/bazelbuild) GitHub
    organization. SIGs may link to external resources if they choose to organize
    their work outside of the `bazelbuild` GitHub organization
-   Bazel Owners approve or reject SIG applications and consult other
    stakeholders as necessary

Before entering the formal parts of the process, you should consult with
the Bazel product team, at product@bazel.build. Most SIGs require conversation
and iteration before approval.

The formal request for the new group is done by submitting a charter as a PR to
[`bazelbuild/community`](https://github.com/bazelbuild/community),
and including the request in the comments on the PR following the template
below. On approval, the PR for the group is merged and the required resources
created.

### Template Request for New SIG

To request a new SIG, use the template in the community repo:
[SIG-request-template.md](https://github.com/bazelbuild/community/blob/main/governance/SIG-request-template.md).

### Chartering

To establish a group, you need a charter and must follow the Bazel
[code of conduct](https://github.com/bazelbuild/bazel/blob/HEAD/CODE_OF_CONDUCT.md).
Archives of the group will be public. Membership may either be open to all
without approval, or available on request, pending approval of the group
administrator.

The charter must nominate an administrator. As well as an administrator, the
group must include at least one person as lead (these may be the same person),
who serves as point of contact for coordination as required with the Bazel
product team.

Group creators must post their charter to the group mailing list. The community
repository in the Bazel GitHub organization archives such documents and
policies. As groups evolve their practices and conventions, they should update
their charters within the relevant part of the community repository.

### Collaboration and inclusion

While not mandated, the group should choose to make use of collaboration
via scheduled conference calls or chat channels to conduct meetings. Any such
meetings should be advertised on the mailing list, and notes posted to the
mailing list afterwards. Regular meetings help drive accountability and progress
in a SIG.

Bazel product team members may proactively monitor and encourage the group to
discussion and action as appropriate.

### Launch a SIG

Required activities:

-   Notify Bazel general discussion groups
    ([bazel-discuss](https://groups.google.com/g/bazel-discuss),
    [bazel-dev](https://groups.google.com/g/bazel-dev)).

Optional activities:

-   Create a blog post for the Bazel blog

### Health and termination of SIGs

The Bazel owners make a best effort to ensure the health of SIGs. Bazel owners
occasionally request the SIG lead to report on the SIG's work, to inform the
broader Bazel community of the group's activity.

If a SIG no longer has a useful purpose or interested community, it may be
archived and cease operation. The Bazel product team reserves the right to
archive such inactive SIGs to maintain the overall health of the project,
though it is a less preferable outcome. A SIG may also opt to disband if
it recognizes it has reached the end of its useful life.

## Note

*This content has been adopted from Tensorflow’s
[SIG playbook](https://www.tensorflow.org/community/sig_playbook)
with modifications.*
