Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 29 additions & 11 deletions docs/advanced/community-usermods.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,39 @@ This page is an index of usermods written by the WLED community. Entries are mai

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.

## Adding your usermod
!!! warning "Community content — use at your own risk"
The usermods listed below are created and maintained by community members, **not** the WLED development team.
**The WLED project does not review, test, endorse, or provide support for any of these modules.**

Open a pull request to [WLED-Docs](https://github.com/wled/WLED-Docs) adding a row to the table below. One row, one PR.
Usermods are native C++ code compiled directly into your WLED firmware. A usermod runs with
**full, unrestricted access** to your device's hardware, network, and memory — there is no
sandbox or permission system to limit what it can do. Before installing a third-party build:

- **Read the source code** (or have someone you trust read it) before flashing.
- Be aware that a malicious or poorly written usermod could expose your network, **brick your
device**, or behave in ways its description does not mention.
- Only flash firmware from sources you trust. Prefer builds you compile yourself from
reviewed source code over pre-compiled binaries distributed by strangers.

The WLED project cannot verify the safety or quality of community usermods.
**You are solely responsible for any third-party code you choose to run on your devices.**

## Index

| Name | Description | Author | Platforms | License | Notes |
|---|---|---|---|---|---|
| [wled-usermod-example](https://github.com/wled/wled-usermod-example) | Annotated template — use as template to start your own usermod | @wled | both | EUPL | Official starting point |
| [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 | EUPL | Ships with WLED; enable with `custom_usermods = user_fx` |
Comment on lines +9 to +31

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Scope the warning to third-party usermods.

The box says every usermod below is community-maintained, but Line 31 also lists user_fx, which is marked as shipping with WLED and authored by @wled. Narrow the warning or split the official example out so the statement stays accurate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/advanced/community-usermods.md` around lines 9 - 31, The warning blanket
currently states all listed usermods are community-maintained but the table
includes an official module (`user_fx` by `@wled`) and the example template
(`wled-usermod-example`), so update the text to scope the warning to third-party
usermods only: either change the heading/body to say "third-party usermods" and
ensure official entries like `user_fx` are exempt, or move official entries
(`user_fx`, `wled-usermod-example`) into a separate "Official/Included modules"
section and keep the warning box above the third-party list; update any wording
that implies the project doesn't maintain those specific official modules
accordingly.



## Adding your usermod to the list

Open a pull request to [WLED-Docs](https://github.com/wled/WLED-Docs) adding a row to the table above.

Use this format:

```markdown
| [Name](https://github.com/you/your-usermod) | Short description | @yourname | esp32 | |
| [Name](https://github.com/you/your-usermod) | Short description | @yourname | esp32 | MIT | |
```

Platforms: `esp32`, `esp8266`, or `both`.

## Index

| Name | Description | Author | Platforms | Notes |
|---|---|---|---|---|
| [wled-usermod-example](https://github.com/wled/wled-usermod-example) | Annotated template — fork this to start your own usermod | @wled | both | Official starting point |
| [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` |
Platforms: `esp32`, `esp8266`, or `both`.
14 changes: 7 additions & 7 deletions docs/advanced/custom-features.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,33 +47,33 @@ custom_usermods =

The recommended approach is to keep your usermod in its own repository, separate from the WLED source tree. This lets you version and share it independently, and reference it from any WLED build without copying files.

#### 1. Fork the example repository
#### 1. Create a repository from the template

Fork [wled/wled-usermod-example](https://github.com/wled/wled-usermod-example) on GitHub. It contains a minimal `library.json` and a fully annotated example implementation — everything you need to get started. Rename the files and class to something descriptive, then add your code.
On GitHub, open [wled/wled-usermod-example](https://github.com/wled/wled-usermod-example) and click **Use this template → Create a new repository**. This gives you a clean, independent repository pre-loaded with a minimal `library.json` and a fully annotated example implementation. Rename the files and class to something descriptive, then add your code.

#### 2. Reference it locally during development

Clone your fork somewhere convenient — alongside your WLED checkout works well, since both projects can then be open in the same VS Code session:
Clone your new repository somewhere convenient — alongside your WLED checkout works well, since both projects can then be open in the same VS Code session:

```text
~/projects/
WLED/ ← the WLED source
my-wled-usermod/ ← your fork
my-wled-usermod/ ← your repository
library.json
my_usermod.cpp
```

In `platformio_override.ini`, point `custom_usermods` at the local clone using a `file://` URL:
In `platformio_override.ini`, point `custom_usermods` at the local clone using a `symlink://` URL:

```ini
[env:esp32dev_my_usermod]
extends = env:esp32dev
custom_usermods =
${env:esp32dev.custom_usermods}
file:///home/you/projects/my-wled-usermod
symlink:///home/you/projects/my-wled-usermod
```

On Windows, use the `file:///C:/Users/you/...` form with forward slashes: `file:///C:/Users/you/projects/my-wled-usermod`.
On Windows, use the `symlink://C:/Users/you/...` form with forward slashes: `symlink://C:/Users/you/projects/my-wled-usermod`.

PlatformIO will pick up your local changes on each build, and you can edit the usermod and WLED side-by-side without switching projects.

Expand Down