diff --git a/docs/FAQ.md b/docs/FAQ.md
index ebd50812830..63aa5f74d1f 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -11,10 +11,8 @@ When you run [`arduino-cli board list`][arduino cli board list], your board does
FQBN stands for Fully Qualified Board Name. It has the following format:
`VENDOR:ARCHITECTURE:BOARD_ID[:MENU_ID=OPTION_ID[,MENU2_ID=OPTION_ID ...]]`, with each `MENU_ID=OPTION_ID` being an
-optional key-value pair configuration. Each field accepts letters (`A-Z` or `a-z`), numbers (`0-9`), underscores (`_`),
-dashes(`-`) and dots(`.`). The special character `=` is accepted in the configuration value. The `VENDOR` and
-`ARCHITECTURE` parts can be empty. For a deeper understanding of how FQBN works, you should understand the [Arduino
-platform specification][0].
+optional key-value pair configuration. The `VENDOR` and `ARCHITECTURE` parts can be empty. For a deeper understanding of
+how FQBN works, you should understand the [Arduino platform specification][0].
## How to set multiple board options?
diff --git a/docs/package_index_json-specification.md b/docs/package_index_json-specification.md
index 2752ef732ea..9cfcebe4422 100644
--- a/docs/package_index_json-specification.md
+++ b/docs/package_index_json-specification.md
@@ -64,6 +64,8 @@ The metadata fields are:
- `name`: the folder used for the installed cores. The
[vendor folder](platform-specification.md#hardware-folders-structure) name of the installed package is determined by
this field
+ - The value must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers (`0`-`9`), underscores
+ (`_`), dashes (`-`), and dots (`.`).
- `maintainer`: the extended name of the vendor that is displayed on the Arduino IDE Boards Manager GUI
- `websiteURL`: the URL to the vendor's website, appears on the Arduino IDE Boards Manager as a "More info" link
- `email`: the email of the vendor/maintainer
@@ -260,6 +262,8 @@ Each PLATFORM describes a core for a specific architecture. The fields needed ar
- `name`: the extended name of the platform that is displayed on the Boards Manager GUI
- `architecture`: is the architecture of the platform (avr, sam, etc...). It must match the architecture of the core as
explained in the [Arduino platform specification](platform-specification.md#hardware-folders-structure)
+ - The value must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers (`0`-`9`), underscores
+ (`_`), dashes (`-`), and dots (`.`).
- `version`: the version of the platform.
- `deprecated`: (optional) setting to `true` causes the platform to be moved to the bottom of all Boards Manager and
[`arduino-cli core`](https://arduino.github.io/arduino-cli/latest/commands/arduino-cli_core/) listings and marked
diff --git a/docs/platform-specification.md b/docs/platform-specification.md
index 47fbc2a62bc..652b7348878 100644
--- a/docs/platform-specification.md
+++ b/docs/platform-specification.md
@@ -24,7 +24,11 @@ Alternatively, a platform may be manually installed by the user inside the Sketc
- `{directories.user}` is the user directory as specified in the
[configuration file](configuration.md#default-directories).
- `{VENDOR_NAME}` is the identifier of the vendor/maintainer of the platform.
+ - The name of the vendor directory must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers
+ (`0`-`9`), underscores (`_`), dashes (`-`), and dots (`.`).
- `{ARCHITECTURE}` is the architecture of the CPU used in the platform.
+ - The name of the architecture directory must not contain any characters other than the letters `A`-`Z` and `a`-`z`,
+ numbers (`0`-`9`), underscores (`_`), dashes (`-`), and dots (`.`).
A vendor/maintainer may have multiple supported architectures.
@@ -534,6 +538,9 @@ This file contains definitions and metadata for the boards supported by the plat
short name, the board ID. The settings for a board are defined through a set of properties with keys having the board ID
as prefix.
+The board ID must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers (`0`-`9`), underscores
+(`_`), and dashes (`-`).
+
For example, the board ID chosen for the Arduino Uno board is "uno". An extract of the Uno board configuration in
boards.txt looks like:
@@ -1591,8 +1598,13 @@ This board was produced in two models, one with an ATmega168 microcontroller and
going then to define a custom option, using the "cpu" MENU_ID, that allows the user to choose between the two different
microcontrollers.
-We must first define a set of **menu.MENU_ID=Text** properties. **Text** is what is displayed on the GUI for every
-custom menu we are going to create and must be declared at the beginning of the boards.txt file:
+We must first define a set of **menu.MENU_ID=Text** properties.
+
+The menu ID must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers (`0`-`9`), underscores
+(`_`), and dashes (`-`).
+
+**Text** is what is displayed on the GUI for every custom menu we are going to create and must be declared at the
+beginning of the boards.txt file:
```
menu.cpu=Processor
@@ -1627,7 +1639,12 @@ duemilanove.menu.cpu.atmega168=ATmega168
We have defined two values: "atmega328" and "atmega168".
Note that the property keys must follow the format
**BOARD_ID.menu.MENU_ID.OPTION_ID=Text**, where **Text** is what is displayed under the "Processor" menu in the IDE's
-GUI.
Finally, the specific configuration for each option value:
+GUI.
+
+The option ID must not contain any characters other than the letters `A`-`Z` and `a`-`z`, numbers (`0`-`9`), underscores
+(`_`), dashes (`-`), and equal signs (`=`).
+
+Finally, the specific configuration for each option value:
```
[.....]