Version:

# Formatting O3DE Documentation

The Open 3D Engine (O3DE) documentation is written in Goldmark Markdown syntax. Goldmark is the Markdown parser used by Hugo , the site builder used for o3de.org.

With Markdown, sometimes there are multiple methods to achieve the same result. For example, you can enclose words in underscores (_) or asterisks (*) to create italics. In these situations, it is best to use one method throughout the documentation. To keep both the documentation Markdown source files, and the O3DE documentation on-page presentation consistent, adhere to the following basic documentation standards.

Use a series of hashes (#) to define section headings. The H1 heading is taken from the metadata title element, which displays as the on-page title. Use standard capitalization, not sentence capitalization, for both the metadata title (title), the table-of-contents title (linkTitle).

Section titles should be an H2 (##) heading, and use sentence case for the section title.

Subsection titles should start with an H3 (###) heading, and use sentence case for the subsection title.

Example:

---
title: An O3DE Documentation Page Title
description: A topic about an Open 3D Engine feature.
weight: 100
---

## H2 for the first section title (Sentence title capitalization)

### H3 for a sub-section title (Sentence title capitalization)

...

## H2 for the second section title (Sentence title capitalization)

### H3 for sub-section title (Sentence title capitalization)

#### H4 for sub-section of a sub-section title (Sentence title capitalization)


## Text format

There can be multiple methods to achieve the same result in Markdown. Adhere to the following standards to make both the Markdown source files and the on-page documentation much easier for readers to parse at a glance. Consistency in the Markdown source format also aids automation efforts for documentation.

### Bold text

To bold text, enclose the text in double asterisks (**).

Example:

This is **bold** text.


Result:

This is bold text.

### Italic text

To italicize text, enclose the text in a single asterisk (*).

Example:

This is *italic* text.


Result:

This is italic text.

### Inline code

To format text as inline code, enclose the text in a single backtick ().

Example:

This is code text.


Result:

This is code text.

### Code block

Use code blocks for multi-line code. Some languages are supported for syntax highlighting. The language is specified after the opening back-ticks () of the code block.

When writing code blocks, make sure to include a language identifier. For C++ code blocks, use the cpp identifier. See Hugo’s List of Chroma Highlighting Languages for additional language identifiers.

Example:

python
# Use the 'request' find the type of job via 'jobKey' to determine what to do
def on_process_job(args):
try:
# Get request information
request = args[0]
...



Result:

# Use the 'request' find the type of job via 'jobKey' to determine what to do
def on_process_job(args):
try:
# Get request information
request = args[0]
...

Note:
Syntax highlighting in the code block should conform to the contrast guidelines.

Write links without the file extension .md.

[...](./)Returns to the current directory’s index page.
[...](page-linked-from-index)Links from the index page to a page in the index’s directory.
[...](./page-linked-from-non-index)Links from any page to a page in the same directory.
[...](forward-directory-linked-from-index/)Links from the index page to a subdirectory of the index.
[...](./forward-directory-linked-from-non-index/)Links from any page to a subdirectory of the current page.
[...](../)Returns to the index of the previous directory.
[...](../link-to-page-in-previous-directory)Links from any page to a page in the previous directory.
[...](link#subheading)Link to a subheading within a topic.
[...](/docs/guide/link-to-page)Link to a page in the documentation.

For a third-party product, you must provide an external link to the source. Only do this for the first on-page instance, or when it’s most relevant.

For supplemental information, consider whether an external link is needed at all. Providing a brief explanation may suffice and is preferred because it keeps the user’s focus on the current topic.

### Quotes and punctuation placement

When the quote is contained within a sentence, place the punctuation outside the quote.

When the quote is a complete sentence, place the punctuation inside the quote.

TypeExample
Quote is within a sentence… assets that are “game-ready”.
Quote is a complete sentence“Focus is a matter of deciding what things you’re not going to do .
- John Carmack

## Information structure

### Tables

Example:

| Default column| Right-aligned column | Center-aligned column | Left-aligned column |
| - | -: | :-: | :- |
| Row | entry | entry | entry |
| Row | entry | entry | entry |
| Row with missing entry | entry | | entry |


Result:

Default columnRight-aligned columnCenter-aligned columnLeft-aligned column
Rowentryentryentry
Rowentryentryentry
Row with missing entryentryentry

### Tabs

Example:

{{< tabs name="name-for-this-group-of-tabs" >}}
{{% tab name="First tab" %}}

First tab's content.

{{% /tab %}}
{{% tab name="Second tab" %}}

Second tab's content.

{{% /tab %}}
{{< /tabs >}}


Result:

First tab’s content.

Second tab’s content.

### Lists

If the list is longer than four items, or if the list contains call-out shortcode or an image, add newlines between each list element to improve readability.

#### Ordered lists

Use ordered lists when the order of the items is significant, such as a procedure of sequential steps. For ease, you can use 1. to delineate all items in ordered lists. Goldmark automatically numbers the items in the list.

Example:

1. Step one
1. Step two
1. Step three
1. Step four


Result:

1. Step one
2. Step two
3. Step three
4. Step four

#### Unordered lists

Use unordered lists if the order of the items is arbitrary, such as a list of assets.

You can use * or - to delineate items in unordered lists. Whatever you use, be consistent throughout the whole list.

Example:

* Item one
* Item two
* Item three


Result:

• Item one
• Item two
• Item three

#### Nested lists

Nested lists are often used for sub-steps or requirements lists in a procedure. Indent four spaces to nest a list.

For code blocks within a step, indent the code block once more past the step’s indentation.

For shortcodes within a step, similarly indent the opening and closing shortcode brackets once more past the step’s indentation. However, be cautious not to indent the enclosed text because it leads to a code block within the shortcode.

Example:

1. Step one
1. Step two
* Item one
* Item two
* Item three
1. Code example

A line of code or command

1. Callout example
{{< note >}}
A callout box.
{{< /note >}}


Result:

1. Step one
2. Step two
• Item one
• Item two
• Item three
3. Code example
A line of code or command

4. Callout example
Note:
A callout box.

#### Definition lists

Use definition lists for content that lists a pair of terms and their definitions. For example, a glossary.

Use : to delineate each definition in the list.

Example:

First Term
: This is the definition of the first term.

Second Term
: This is one definition of the second term.
: This is another definition of the second term.


Result:

First Term
This is the definition of the first term.
Second Term
This is one definition of the second term.
This is another definition of the second term.

## Terminology

### Italicize new terms

DoDon’t
… to create image based lighting (IBL).… to create image based lighting (IBL).
A prefab is a collection of entities …A “prefab” is a collection of entities …

Properly format trademark titles and terminology according to its use from the source. Provide a link to the source’s relevant material for the first on-page instance, or when it’s most relevant.

## Applications, tools, Gems, and components

### Bold applications and tools

For the first on-page reference to applications and tools, use bold text. Use unformatted text for subsequent references.

For tools that are provided as scripts, instead use code style for the name of the script, followed by the type of script in unformatted text. Do this for all instances throughout the page.

TypeExample
ApplicationO3DE Editor is the primary development environment for …. Open O3DE Editor by launching it from…
ToolThe o3de Python script allows you to… To use the o3de Python script…

### Bold Gems and components

For the first on-page reference to Gems and components, use bold text. Use unformatted text for subsequent references.

• For Gems, capitalize and bold both the name of the Gem and the word “Gem”.
• For components, capitalize and bold the name of the component. Use lowercase and unformatted text for the word “component”.
TypeExample
GemThe Multiplayer Gem provides… Use the Multiplayer Gem to…
ComponentsThe Material component adds… Also, you can use the Material component to…

## User interface, inputs, and hotkeys

Users interact with O3DE through various user interface (UI) elements, inputs, and hotkeys. They’re often included in tasks and tutorials, instructing users to perform an action.

For UI elements, inputs, and hotkeys, use bold text. Do this for all instances throughout the page.

For formatting keys: abbreviate key names, remove spaces, and use sentence-casing.
TypeExampleAvoid
UI elementChoose Edit.Click “Edit”.
UI element.. the Play button.… the Play button.
InputPress Enter.Press “Enter”.
Input.. right-click the asset name …… right-click the asset name …
HotkeyHold Ctrl+ShiftHold Control + Shift

## Code, commands, and APIs

### Code style for inline code and commands

DoDon’t
… set enable_memory_tracking = True.… set enable_memory_tracking = “True”.
… enter the command dump_vars.… enter the command dump_vars.

### Code style for programming objects

DoDon’t
… value of the sys_maxfps field.… value of the “sys_maxfps” field.
… use the WorldRequestBus.… use the “WorldRequestBus”.
… in AZ::Data::AssetData derived classes.… in AZ::Data::AssetData derived classes.

### Bold property names, and code style their values

DoDon’t
Set the Color property to 255,0,0.Set the Color property to “255,0,0”.
For Intensity Mode, select Candela.For Intensity Mode, select Candela.
Valid Mass values range from 0 to Infinity.Valid Mass values range from 0 to Infinity.

### Don’t include the command prompt

DoDon’t
cmake --build ...C:\> cmake --build ...

### Separate commands from output

cmake --build <MyProject> --target Editor --config profile -- -m


The output is similar to this:

Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET Framework

Checking Build System
Building Custom Rule D:/O3DE/Code/Framework/AzCore/CMakeLists.txt
unity_16_cxx.cxx
unity_20_cxx.cxx
unity_19_cxx.cxx
unity_24_cxx.cxx
unity_23_cxx.cxx


## Files, directories, and paths

### Code style for filenames, directories, and paths

All paths should be platform agnostic and use / path separators. When using relative paths, give the reader context to understand what the path is relative to.

DoDon’t
Open the project’s project.json file.Open the project’s project.json file.
… in the /<project>/levels directory.… in the /<project>/levels directory.
Open the /<project>/game.cfg file.Open the /<project>/game.cfg file.

### Mark placeholders with angle brackets

Use angle brackets for placeholders. Use the text within the brackets to tell the reader what a placeholder represents.

Example:

git push origin <your-branch-name>