Project: /_project.yaml
Book: /_book.yaml

# Bazel Brand Guidelines

{% dynamic setvar source_file "site/en/brand/index.md" %}
{% include "_buttons.html" %}

The Bazel trademark and logo ("Bazel Trademarks") are trademarks of Google, and
are treated separately from the copyright or patent license grants contained in
the Apache-licensed Bazel repositories on GitHub. Any use of the Bazel
Trademarks other than those permitted in these guidelines must be approved in
advance.

## Purpose of the Brand Guidelines {:#purpose-brand}

These guidelines exist to ensure that the Bazel project can share its technology
under open source licenses while making sure that the "Bazel" brand is protected
as a meaningful source identifier in a way that's consistent with trademark law.
By adhering to these guidelines, you help to promote the freedom to use and
develop high-quality Bazel technology.

## Acceptable Uses {:#acceptable-uses}

Given the open nature of Bazel, you may use the Bazel trademark to refer to the
project without prior written permission. Examples of these approved references
include the following:

*   To refer to the Bazel Project itself;
*   To link to bazel.build;
*   To refer to unmodified source code or other files shared by the Bazel
    repositories on GitHub;
*   In blog posts, news articles, or educational materials about Bazel;
*   To accurately identify that your design or implementation is based on, is
    for use with, or is compatible with Bazel technology.

Examples:

*   \[Your Product\] for Bazel
*   \[Your Product\] is compatible with Bazel
*   \[XYZ\] Conference for Bazel Users

## General Guidelines {:#general-guidelines}

*   The Bazel name may never be used or registered in a manner that would cause
    confusion as to Google's sponsorship, affiliation, or endorsement.
*   Don't use the Bazel name as part of your company name, product name, domain
    name, or social media profile.
*   Other than as permitted by these guidelines, the Bazel name should not be
    combined with other trademarks, terms, or source identifiers.
*   Don't remove, distort or alter any element of the Bazel Trademarks. That
    includes modifying the Bazel Trademark, for example, through hyphenation,
    combination or abbreviation. Do not shorten, abbreviate, or create acronyms
    out of the Bazel Trademarks.
*   Don't display the word Bazel using any different stylization, color, or font
    from the surrounding text.
*   Don't use the term Bazel as a verb or use it in possessive form.
*   Don't use the Bazel logo on any website, product UI, or promotional
    materials without prior written permission from
    [product@bazel.build](mailto:product@bazel.build).

## Usage for Events and Community Groups {:#usage-events}

The Bazel word mark may be used referentially in events, community groups, or
other gatherings related to the Bazel build system, but it may not be used in a
manner that implies official status or endorsement.

Examples of appropriate naming conventions are:

*   \[XYZ\] Bazel User Group
*   Bazel Community Day at \[XYZ\]
*   \[XYZ\] Conference for Bazel Users

where \[XYZ\] represents the location and optionally other wordings.

Any naming convention that may imply official status or endorsement requires
review for approval from [product@bazel.build](mailto:product@bazel.build).

Examples of naming conventions that require prior written permission:

*   BazelCon
*   Bazel Conference

## Contact Us {:#contact-us}

Please do not hesitate to contact us at
[product@bazel.build](mailto:product@bazel.build) if you are unsure whether your
intended use of the Bazel Trademarks is in compliance with these guidelines, or
to ask for permission to use the Bazel Trademarks, clearly describing the
intended usage and duration.