This is the official user documentation for WLED, published at kno.wled.ge using Material for MkDocs.
All documentation is written in English. Contributors improve docs by editing Markdown files and submitting pull requests.
WLED is an open source firmware - written mainly in C++ using platformIO and node.js tooling - for ESP32/ESP8266 microcontrollers controlling addressable LEDs, with a web UI and various networking APIs for custom integrations. WLED is licensed under EUPL-1.2.
WLED-Docs/
├── docs/ # All documentation source files
│ ├── index.md # Landing page
│ ├── assets/ # Images, stylesheets, JS, MkDocs overrides
│ │ └── images/content/ # Preferred location for inline images
│ ├── basics/ # Getting started, installation, compatibility, FAQ
│ ├── features/ # WLED feature pages (effects, segments, presets, etc.)
│ ├── interfaces/ # API and protocol docs (JSON API, MQTT, E1.31, etc.)
│ ├── advanced/ # Wiring, compilation, custom features, etc.
│ └── about/ # Contributors, roadmap, privacy policy
├── mkdocs.yml # Site config, navigation, theme settings
└── README.md # Contributor guide
Every documentation page must begin with a YAML front matter block:
---
title: Page Title
hide:
# - navigation
# - toc
---titleis required and must match the nav entry inmkdocs.yml.navigationandtocare commented out by default (i.e., both are shown). Only hide them when there is a clear design reason (e.g., the landing page hides both).
Every new page must also be registered in the nav: section of mkdocs.yml. Pages not listed there will not appear in the site navigation.
nav:
- Section Name:
- Page Title: section/filename.mdIndentation in mkdocs.yml is significant.
- Headings: Use
##for top-level sections within a page (#is optional, as it may conflict with the page title). Use###and####for sub-sections. - Admonitions: Use MkDocs Material admonitions (
!!! info,!!! tip,!!! warning,!!! danger) for callouts. These are rendered as styled boxes on the site. - Tables: Use standard GFM pipe tables.
- Code blocks: Use fenced code blocks with a language hint (e.g.,
```yaml). - Bold/Italic: Use
**bold**for important terms. Use_italic_sparingly. - Line breaks: A trailing two-space line break (or
<br />) is used to force a line break within a paragraph where needed. - Internal links: Use root-relative paths without the
.mdextension, e.g.[Segments](/features/segments). - External links: Use standard Markdown link syntax. Prefer linking to stable, canonical URLs.
- Store images in
docs/assets/images/content/whenever possible. Avoid external image hosting — the external resource could disappear at any time. - Reference images using a path relative to the page or a root-relative path, e.g.:

- Animated GIFs hosted on
raw.githubusercontent.com/scottrbailey/WLED-Utils/are used extensively in the Effects table and are acceptable for that page.
When reviewing a pull request, verify the following:
- All text is in English.
- Content is accurate and consistent with the current WLED feature set.
- No duplicate content — check whether similar information already exists on another page and cross-link instead.
- Links are valid — no broken internal or external links.
- Images are stored in
docs/assets/images/content/(not external hosting) unless they are GIF previews from the known WLED-Utils repository.
- Front matter block (
---) is present and includes atitlefield. - Page title in front matter matches the entry in
mkdocs.yml. - Heading hierarchy is correct (
##→###→####, no skipping levels). - Admonitions use the correct type (
info,tip,warning,danger) for the context. - Tables are properly formatted with pipe characters.
- Code blocks use language identifiers.
- No unintentional trailing whitespace (two trailing spaces are allowed for forced line breaks).
- Tone is informal, friendly, and inviting — avoid overly formal or academic language.
- Title case: Use title case for page title and section headings; articles and short prepositions stay lowercase.
- Language is simple and clear — short sentences, common words, no unexplained jargon — so non-native English speakers can easily follow.
- Logic is easy to follow, examples are kept simple.
- Claim calibration: Calibrate verbs to evidence; do not write "proves" when the evidence is "suggests".
- No grammar or spelling mistakes.
- Express coordinate ideas in the same grammatical form.
- Wording is concise — remove filler phrases (e.g. "it is worth noting that", "basically", "simply") and redundant sentences.
- Prefer "use" over "leverage", "method" over "methodology", "feature" over "functionality".
- Contractions (e.g. "you'll", "don't", "it's") are welcome — they help keep the tone approachable.
- Avoid idioms or culture-specific phrases (e.g. "beating around the bush", "get your ducks in a row") — they are hard to understand when translated literally into other languages.
- Smileys 😊, concrete examples, and images/diagrams/illustrations are encouraged where they help readers grasp the main message.
- If a new page is added, it is registered in the
nav:section ofmkdocs.ymlat the correct location and indentation level. - If a page is renamed or moved, the
nav:entry and all internal links to it are updated.
- Changes are limited to documentation. This repository does not contain WLED firmware code.
- PR does not introduce changes to
mkdocs.ymlthat alter unrelated pages or nav structure.
To preview the site locally before submitting:
Docker (recommended):
docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-materialPython/pip:
pip install mkdocs-material
mkdocs serveThen visit http://localhost:8000.
Merges to main trigger the GitHub Actions workflow (.github/workflows/main.yml), which builds the MkDocs site and deploys it to GitHub Pages automatically. There is no manual deployment step required.
- Provide references when making analyses or recommendations. Base them on the correct branch or PR.
- When unsure, say so. Gather more information rather than guessing.
- Support factual claims with verifiable citations, references or concrete evidence; never fabricate citations.
- Acknowledge good patterns when you see them. Positive feedback always helps.
- When updating an existing PR, retain the original description. Only modify it to ensure technical accuracy. Add change logs after the existing description.
- No force-push on open PRs