Skip to content

Commit 0732641

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 441b2c2 + af1c278 commit 0732641

61 files changed

Lines changed: 879 additions & 78 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.coderabbit.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
2+
3+
language: en-US
4+
5+
reviews:
6+
# generic review setting, see https://docs.coderabbit.ai/reference/configuration#reference
7+
# auto_apply_labels: true
8+
# abort_on_close: false
9+
high_level_summary: true
10+
review_status: true
11+
collapse_walkthrough: false
12+
poem: true
13+
sequence_diagrams: false
14+
slop_detection:
15+
label: needs_rework
16+
auto_review:
17+
enabled: true
18+
ignore_title_keywords:
19+
- WIP
20+
21+
finishing_touches:
22+
# Docstrings | Options for generating Docstrings for your PRs/MRs.
23+
docstrings:
24+
# Docstrings | Allow CodeRabbit to generate docstrings for PRs/MRs.
25+
# default: true - disabled in WLED: has caused confusion in the past
26+
enabled: false
27+
unit_tests:
28+
# default: true - disabled in WLED: we don't have a unit test framework, this option just confuses contributors
29+
enabled: false
30+
simplify:
31+
enabled: true

AGENTS.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# AGENTS.md
2+
3+
## Repository Overview
4+
5+
This is the official user documentation for [WLED](https://github.com/wled/WLED), published at [kno.wled.ge](https://kno.wled.ge) using [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/).
6+
7+
All documentation is written in **English**. Contributors improve docs by editing Markdown files and submitting pull requests.
8+
9+
[WLED](https://github.com/wled/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.
10+
11+
---
12+
13+
## Repository Structure
14+
15+
```
16+
WLED-Docs/
17+
├── docs/ # All documentation source files
18+
│ ├── index.md # Landing page
19+
│ ├── assets/ # Images, stylesheets, JS, MkDocs overrides
20+
│ │ └── images/content/ # Preferred location for inline images
21+
│ ├── basics/ # Getting started, installation, compatibility, FAQ
22+
│ ├── features/ # WLED feature pages (effects, segments, presets, etc.)
23+
│ ├── interfaces/ # API and protocol docs (JSON API, MQTT, E1.31, etc.)
24+
│ ├── advanced/ # Wiring, compilation, custom features, etc.
25+
│ └── about/ # Contributors, roadmap, privacy policy
26+
├── mkdocs.yml # Site config, navigation, theme settings
27+
└── README.md # Contributor guide
28+
```
29+
30+
---
31+
32+
## Page Conventions
33+
34+
Every documentation page must begin with a YAML front matter block:
35+
36+
```yaml
37+
---
38+
title: Page Title
39+
hide:
40+
# - navigation
41+
# - toc
42+
---
43+
```
44+
45+
- `title` is required and must match the nav entry in `mkdocs.yml`.
46+
- `navigation` and `toc` are 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).
47+
48+
---
49+
50+
## Navigation Registration
51+
52+
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.
53+
54+
```yaml
55+
nav:
56+
- Section Name:
57+
- Page Title: section/filename.md
58+
```
59+
60+
Indentation in `mkdocs.yml` is significant.
61+
62+
---
63+
64+
## Markdown Style
65+
66+
- **Headings**: Use `##` for top-level sections within a page (`#` is optional, as it may conflict with the page title). Use `###` and `####` for sub-sections.
67+
- **Admonitions**: Use MkDocs Material admonitions (`!!! info`, `!!! tip`, `!!! warning`, `!!! danger`) for callouts. These are rendered as styled boxes on the site.
68+
- **Tables**: Use standard GFM pipe tables.
69+
- **Code blocks**: Use fenced code blocks with a language hint (e.g., ` ```yaml `).
70+
- **Bold/Italic**: Use `**bold**` for important terms. Use `_italic_` sparingly.
71+
- **Line breaks**: A trailing two-space line break (or `<br />`) is used to force a line break within a paragraph where needed.
72+
- **Internal links**: Use root-relative paths without the `.md` extension, e.g. `[Segments](/features/segments)`.
73+
- **External links**: Use standard Markdown link syntax. Prefer linking to stable, canonical URLs.
74+
75+
---
76+
77+
## Images
78+
79+
- Store images in `docs/assets/images/content/` whenever possible. Avoid external image hosting — the external resource could disappear at any time.
80+
- Reference images using a path relative to the page or a root-relative path, e.g.:
81+
```markdown
82+
![Alt text](../assets/images/content/my-image.png)
83+
```
84+
- Animated GIFs hosted on `raw.githubusercontent.com/scottrbailey/WLED-Utils/` are used extensively in the Effects table and are acceptable for that page.
85+
86+
---
87+
88+
## PR Review Checklist
89+
90+
When reviewing a pull request, verify the following:
91+
92+
### Content
93+
94+
- [ ] All text is in **English**.
95+
- [ ] Content is accurate and consistent with the current WLED feature set.
96+
- [ ] No duplicate content — check whether similar information already exists on another page and cross-link instead.
97+
- [ ] Links are valid — no broken internal or external links.
98+
- [ ] Images are stored in `docs/assets/images/content/` (not external hosting) unless they are GIF previews from the known WLED-Utils repository.
99+
100+
### Formatting
101+
102+
- [ ] Front matter block (`---`) is present and includes a `title` field.
103+
- [ ] Page title in front matter matches the entry in `mkdocs.yml`.
104+
- [ ] Heading hierarchy is correct (`#` (optional) → `##` → `###` → `####`, no skipping levels).
105+
- [ ] Admonitions use the correct type (`info`, `tip`, `warning`, `danger`) for the context.
106+
- [ ] Tables are properly formatted with pipe characters.
107+
- [ ] Code blocks use language identifiers.
108+
- [ ] No unintentional trailing whitespace (two trailing spaces are allowed for forced line breaks).
109+
110+
### Writing Style & Readability
111+
112+
- [ ] Tone is **informal, friendly, and inviting** — avoid overly formal or academic language.
113+
- [ ] Title case: Use title case for section and subsection headings; articles and short prepositions stay lowercase.
114+
- [ ] Language is **simple and clear** — short sentences, common words, no unexplained jargon — so non-native English speakers can easily follow.
115+
- [ ] Logic is easy to follow, examples are kept simple.
116+
- [ ] Claim calibration: Calibrate verbs to evidence; do not write "proves" when the evidence is "suggests".
117+
- [ ] No grammar or spelling mistakes.
118+
- [ ] Express coordinate ideas in the same grammatical form.
119+
- [ ] Wording is **concise** — remove filler phrases (e.g. "it is worth noting that", "basically", "simply") and redundant sentences.
120+
- [ ] Prefer "use" over "leverage", "method" over "methodology", "feature" over "functionality".
121+
- [ ] Contractions (e.g. "you'll", "don't", "it's") are welcome — they help keep the tone approachable.
122+
- [ ] 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.
123+
- [ ] Smileys 😊, concrete examples, and images/diagrams/illustrations are encouraged where they help readers grasp the main message.
124+
125+
### Navigation
126+
127+
- [ ] If a new page is added, it is registered in the `nav:` section of `mkdocs.yml` at the correct location and indentation level.
128+
- [ ] If a page is renamed or moved, the `nav:` entry and all internal links to it are updated.
129+
130+
### Scope
131+
132+
- [ ] Changes are limited to documentation. This repository does not contain WLED firmware code.
133+
- [ ] PR does not introduce changes to `mkdocs.yml` that alter unrelated pages or nav structure.
134+
135+
---
136+
137+
## Local Preview
138+
139+
To preview the site locally before submitting:
140+
141+
**Docker (recommended):**
142+
```bash
143+
docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material
144+
```
145+
146+
**Python/pip:**
147+
```bash
148+
pip install mkdocs-material
149+
mkdocs serve
150+
```
151+
152+
Then visit <http://localhost:8000>.
153+
154+
---
155+
156+
## Automated Deployment
157+
158+
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.
159+
160+
161+
## General Guidelines
162+
163+
- **Provide references** when making analyses or recommendations. Base them on the correct branch or PR.
164+
- **When unsure, say so.** Gather more information rather than guessing.
165+
- Support factual claims with verifiable citations, references or concrete evidence; **never fabricate citations**.
166+
- **Acknowledge good patterns** when you see them. Positive feedback always helps.
167+
- When updating an existing PR, retain the original description. Only modify it to ensure technical accuracy. Add change logs after the existing description.
168+
- No force-push on open PRs

docs/about/contributors.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ Tonyno - tireless user support and documentation
4949
### Used Libraries and Dependencies
5050

5151
[ESP8266](https://github.com/esp8266/Arduino)/[ESP32](https://github.com/espressif/arduino-esp32) Arduino Core
52+
[ESP32 Tasmota](https://github.com/tasmota/platform-espressif32)/[ESP32 pioarduino](https://github.com/pioarduino/platform-espressif32) Arduino Core and build tools (since 16.0.0)
5253
[NeoPixelBus](https://github.com/Makuna/NeoPixelBus) by Makuna
53-
[FastLED](https://github.com/FastLED/FastLED/) library
54+
[FastLED](https://github.com/FastLED/FastLED/) library (up to 0.15.5)
5455
[ESPAsyncTCP](https://github.com/me-no-dev/ESPAsyncTCP) by me-no-dev
5556
[ESPAsyncUDP](https://github.com/me-no-dev/ESPAsyncUDP) by me-no-dev (as of 0.9.0)
5657
[ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer) by me-no-dev
@@ -59,7 +60,7 @@ Tonyno - tireless user support and documentation
5960
[WS2812FX](https://github.com/kitesurfer1404/WS2812FX) by kitesurfer1404 (modified)
6061
[IRremoteESP8266](https://github.com/markszabo/IRremoteESP8266) by markszabo (optional)
6162
[Timezone](https://github.com/JChristensen/Timezone) by JChristensen
62-
[Blynk](https://github.com/blynkkk/blynk-library) library (compacted)
63+
[Blynk](https://github.com/blynkkk/blynk-library) library (compacted, up to 0.14.1)
6364
[E1.31](https://github.com/forkineye/E131) library by forkineye (modified)
6465
[Espalexa](https://github.com/Aircoookie/Espalexa) by Aircoookie (modified)
6566
Many included FastLED effects are modified versions of [kriegsman](https://gist.github.com/kriegsman/)'s gists!
@@ -71,6 +72,8 @@ WLED implements Art-Net™ Designed by and Copyright Artistic Licence Holdings L
7172

7273
[![badge](https://img.shields.io/badge/badges-by%20shields.io-blue.svg?style=flat-square)](https://shields.io)
7374
[iro.js](https://iro.js.org/) colorpicker by James Daniel!
75+
[Corsfix](https://corsfix.com/)
76+
7477
Classic UI icons by [Linearicons](https://linearicons.com) created by [Perxis](https://perxis.com)!
7578

7679
If you would like to appear in this list for a contribution you made or be removed from it, feel free to contact me!

docs/about/roadmap.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,5 @@ hide:
55
# - toc
66
---
77

8-
These are currently on my list of what COULD be implemented, there is no guarantee if and when they will be available!
9-
10-
- Create named playlists of presets
11-
- Custom color palettes
12-
- Settings pages overhaul
13-
- Rework of WiFi connection logic (reconnect after WiFi or power outage)
8+
Please check our [WLED milestone planning](https://github.com/wled/WLED/milestones) for upcoming features and releases.
9+
There is no guarantee if and when a new feature or bugfix will be available!
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: Accessing WLED over Internet
3+
hide:
4+
# - navigation
5+
# - toc
6+
---
7+
8+
WLED exposed to Internet safely with the help of a reverse proxy setup.
9+
This document describes the steps needed.
10+
11+
!!! warning "Port Forwarding"
12+
Under no circumstances port forward WLED instance to the public internet.
13+
WLED does not support HTTPS or authentication, leading to a fundamentally insecure setup.
14+
15+
!!! tip "Consider VPN Tunneling"
16+
If you only need access from a single device, such as your phone,
17+
consider a point-to-point VPN tunnel instead. Configuring a tunnel
18+
may require less configuration and maintenance than a HTTPS reverse proxy.
19+
20+
# Reverse proxy requirements
21+
22+
WLED does not implement access control, allowing anyone able to connect to it change configuration or even update firmware.
23+
For a safe access, **the reverse proxy MUST implement access control** to only allow trusted users to access WLED.
24+
25+
Secure access control cannot be implemented over insecure connection. **The reverse proxy MUST implement TLS termination**, only allowing access over HTTPS.
26+
27+
Reverse proxy cannot run on the WLED device.
28+
You need a server in your local network to perform the encryption and proxying.
29+
30+
# Example
31+
32+
Assuming the following network setup, using Caddy as a reverse proxy:
33+
34+
```
35+
[Public Internet]
36+
|
37+
[Router]
38+
|
39+
[Reverse Proxy]
40+
|
41+
[WLED]
42+
```
43+
44+
First, register a domain name. In this example, we assume the name "mydomain.example".
45+
A domain name is commonly a requirement for a HTTP certificate.
46+
You can use a dynamic dns provider for a free domain.
47+
48+
Next, generate a HTTPs certificate for your domain.
49+
For the free Let's Encrypt certificates, configure necessary the automation for refreshing the certificate automatically.
50+
In this example, we are using Caddy which handles this automatically.
51+
52+
We then expose the HTTPS port of the reverse proxy to public internet.
53+
In your network router, port forward port TCP 443 into the Reverse Proxy.
54+
In this example, we are using Caddy which only requires port 443 to complete the Let's Encrypt challenge for automatic certificate issuing.
55+
With other software, you may need to also open insecure HTTP port 80.
56+
57+
Finally, in Caddyfile, configure the reverse proxy and authentication
58+
Note that Caddy uses HTTPS by default.
59+
With other software, we may need to disable access over the unsafe HTTP.
60+
61+
```
62+
mydomain.example {
63+
handle /wled/* {
64+
# Create username and password. Password can be with `caddy hash-password --plaintext mypass`
65+
basicauth {
66+
yourusername PASSWORDHASH
67+
}
68+
uri strip_prefix /wled
69+
reverse_proxy wled-wled-a.lan # IP address or the network local name of the WLED device
70+
}
71+
}
72+
```
73+
74+
Now `https://mydomain.example/wled/` exposes WLED to the public internet using secure HTTPS and password authentication.
75+
76+
For additional securty, consider enabling [OTA lock password](/advanced/ota-lock).
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: Community Usermods
3+
---
4+
5+
This page is an index of usermods written by the WLED community. Entries are maintained by their authors; the WLED project does not test or endorse them.
6+
7+
To help people find your usermod even before it appears here, tag your GitHub repository with the [`wled-usermod`](https://github.com/topics/wled-usermod) topic.
8+
9+
## Adding your usermod
10+
11+
Open a pull request to [WLED-Docs](https://github.com/wled/WLED-Docs) adding a row to the table below. One row, one PR.
12+
13+
Use this format:
14+
15+
```markdown
16+
| [Name](https://github.com/you/your-usermod) | Short description | @yourname | esp32 | |
17+
```
18+
19+
Platforms: `esp32`, `esp8266`, or `both`.
20+
21+
## Index
22+
23+
| Name | Description | Author | Platforms | Notes |
24+
|---|---|---|---|---|
25+
| [wled-usermod-example](https://github.com/wled/wled-usermod-example) | Annotated template — fork this to start your own usermod | @wled | both | Official starting point |
26+
| [user_fx](https://github.com/wled/WLED/tree/main/usermods/user_fx) | Community effects usermod — add your own effects here or use as a template | @wled | both | Ships with WLED; enable with `custom_usermods = user_fx` |

docs/advanced/compiling-wled.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,20 @@ Once you've confirmed VSCode with Platformio is set up correctly, you can add/de
7575
7. Put your `-D` overrides on this new line, giving each `-D` it's own new line.
7676
8. Compile your freshly customized WLED image!
7777

78+
### Adding usermods
79+
80+
To include one or more usermods in your build, add a `custom_usermods` line to your environment in `platformio_override.ini`:
81+
82+
```ini
83+
[env:esp32dev_temperature]
84+
extends = env:esp32dev
85+
custom_usermods =
86+
audioreactive
87+
Temperature
88+
```
89+
90+
Each name corresponds to a folder under `usermods/`. No other file editing is required — usermods self-register when compiled in. For full details, including how to add external usermods from a git repository and how to write your own, see [Custom Features](/advanced/custom-features).
91+
7892
### Flashing the compiled binary
7993

8094
!!! tip

0 commit comments

Comments
 (0)