---
title: Apache Product Name Usage Guide
sidebar_position: 13
---
> See https://www.apache.org/foundation/marks/guide for detailed and complete instructions

The first and most prominent mentions must use the full form: "Apache Linkis" of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the Linkis project and the Linkis software product to the ASF as the parent organization.

Later in each specific document you may use the bare form of the name, i.e. just Linkis, as best suits your writing style.

More specifically:

For use by software vendors or software-related service providers, or when organizations or organization-branded pages are discussing Linkis (or any other Apache brand) in relation to any non-Apache provided software products or services, extra care is required to maintain the independent and vendor-neutral reputation of the Apache brand.

The full form of the name must be used in at least these cases:

- Titles or subtitles, including web page title or description metadata.

- The first and most prominent header elements within any major document section.

- The first and most prominent callout, sidebar, or other types of highlighted blocks of content displayed to the user.

- The first and most prominent uses in running or body text within the document.

- For graphics headers or diagrams, the full form of the name must be clear in the graphic itself where practical; if not, the full form of the name must be used in a prominent caption header, or accompanying explanation of the graphic.

- For video content, in the title and first uses, as well as the last use or any use in credits, must be the full form of the name.

- Proper trademark attributions must also be provided, either in page footers, or in a clearly marked Terms, Legal, Trademarks, or other commonly-named secondary page within a website.

- For use by other kinds of users (i.e. organizations or individuals not primarily providing software products or services somehow related to the Apache software product being discussed):

- For scholarly or academic work: Use the full form in titles, subtitles, the first and most prominent references in headers, callouts, or other highlighted sections, and the first and most prominent references in running or body text. Use of the bare form afterwards is permitted.

- For regularly published media (books, magazines, journalists): ensure the full form is used titles or subtitles, the first and most prominent references in headers, callouts, or other highlighted sections, and the first and most prominent references in running or body text. Otherwise, follow your normal publisher's guidelines for referring to software product names.

- For personal bloggers or individuals: We appreciate the use of the full form of the name in titles and the first and most prominent uses in running or body text.

- Uses of Apache brands in domain names or event names and brands are covered in their own policies.

