Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
774fbc5
16.0.0-beta
netmindz Mar 29, 2026
b293db6
Clarify instructions to always use the correct source code branch
softhack007 Mar 29, 2026
679bb39
Serialize fxdata without ArduinoJSON
willmmiles Mar 28, 2026
56a97a0
Fix off-by-one in fxdata serializer
willmmiles Mar 30, 2026
82ddeff
Remove declaration of removed function
willmmiles Mar 30, 2026
b5556aa
fix for HUB75 builds
softhack007 Mar 30, 2026
a3f7302
Factor out streaming JSON primitives
willmmiles Mar 30, 2026
e4f2964
hotfix: critical bug in candle FX, integer issue in flow FX
DedeHai Apr 2, 2026
da8bfda
bugfix: do not restrict segment inputs to allow trailing strips
DedeHai Apr 3, 2026
227d535
Fix leak in blockRouterAdvertisements
willmmiles Apr 4, 2026
1aba705
Merge pull request #5477 from willmmiles/16_x-ipv6-filter-oops
willmmiles Apr 5, 2026
8228c7e
bugfix in pixelforge (no blur by default), fix glitch in animated gif…
DedeHai Apr 7, 2026
19947ec
Merge pull request #5489 from wled/copilot/fix-wled-discovery-issues
netmindz Apr 10, 2026
188beec
Merge pull request #5465 from netmindz/usage-extended
netmindz Apr 11, 2026
945896d
Merge pull request #5462 from willmmiles/16_x-unlimited-fxdata-size
netmindz Apr 11, 2026
fadc75d
dynarray: Directly apply linker fix
willmmiles Mar 10, 2026
c789e3d
Fix usermod count for LTO
willmmiles Mar 27, 2026
f994c5e
validate_modules: Improve performance
willmmiles Mar 27, 2026
fd890b3
dynarray: Support ESP-IDF
willmmiles Mar 28, 2026
48ab88e
Fix up usermod validation again
willmmiles Mar 30, 2026
4cdc23a
Merge pull request #5497 from willmmiles/16_x-dynarray-fixes
willmmiles Apr 12, 2026
ae36f7e
use memory aligned allocations, fix bug in FFT magnitude (integer pat…
DedeHai Apr 12, 2026
e4a7eff
add search icon back(#5500)
DedeHai Apr 12, 2026
1e42ebf
mask out flag bits in DDP type for compatibility
DedeHai Apr 12, 2026
c1e5ac5
bugfixes in PS effects
DedeHai Apr 17, 2026
83dd1b0
Merge pull request #5516 from kilrah/fix_dmx_ident
softhack007 Apr 19, 2026
974c15c
Fix blending style options list filter for iOS (#5513)
DedeHai Apr 20, 2026
e6077ac
Update rules for PR descriptions and change logs
softhack007 Apr 20, 2026
79fde56
align AI instructions with ``main`` branch
softhack007 Apr 20, 2026
6394bec
Highlight target branch for pull requests
softhack007 Apr 20, 2026
96b0c7b
better packet queuing & pacing for custom palette live preview (#5515)
DedeHai Apr 20, 2026
6afc990
GoL missing return. (#5523)
Brandon502 Apr 22, 2026
7f292b9
fix indentation
DedeHai Apr 22, 2026
c53511b
add placeholder to keep custom palette ID's consistent (#5537)
DedeHai Apr 25, 2026
41e4bbf
Merge pull request #5473 from DedeHai/pin_dropdowns
netmindz Apr 25, 2026
456ddee
Merge pull request #5503 from RobertoD91/main
netmindz Apr 25, 2026
0325e30
cleanup of PR #5503: remove unnecessary changes (#5536)
DedeHai Apr 25, 2026
f79cf56
move pixelforge json list and cpt city palettes to wled repo (#5541)
DedeHai Apr 26, 2026
61bd8bf
update VERSION
DedeHai May 1, 2026
74e0b16
auto-migration for sunrise/sunset legacy config (#5555)
DedeHai May 1, 2026
9fdd487
relax restrictions on DDP protocol, minimal check for artNet (#5554)
DedeHai May 1, 2026
8248966
Name CI artifacts by WLED_RELEASE_NAME instead of PlatformIO env
netmindz Apr 26, 2026
967ef07
Relax artifact name regex to support forks with different project names
netmindz Apr 26, 2026
46dafa2
ci: opt into Node.js 24 for GitHub Actions runners
netmindz Apr 26, 2026
2fa5266
Enhance audio reactive logic with improved input validation and new "…
netmindz Apr 18, 2026
e551ca8
Add audioreactive custom_usermod to multiple ESP8266 environments in …
netmindz Apr 18, 2026
32de108
Clean up redundant preprocessor directive in audio_reactive.cpp
netmindz Apr 18, 2026
1c8cd15
Fix network-only dmType handling and debug diagnostics
Copilot Apr 21, 2026
2c1f3c5
Refactor AR init debug logging for network-only sentinel
Copilot Apr 21, 2026
25668bb
Validate gzipped firmware on ESP8266
willmmiles Apr 28, 2026
89aae70
fix refresh of custom palettes
DedeHai Apr 26, 2026
ef354d0
add usermod palettes to fix AR palette indexing
DedeHai Apr 26, 2026
52d897e
rename and bugfixes
DedeHai Apr 26, 2026
6dcae50
apply default pal before bounds check
DedeHai Apr 26, 2026
5521998
rename removeUsermodPalettes
DedeHai Apr 26, 2026
520d870
fix typo
DedeHai Apr 26, 2026
5dc627e
remove unneeded check
DedeHai Apr 26, 2026
dc5ee3f
Add name to usermod palette
netmindz May 3, 2026
8a653eb
Use usermod name prefix for usermod-supplied palette names
netmindz May 3, 2026
68640f5
Fix AudioReactive palette names to avoid duplication with usermod prefix
netmindz May 3, 2026
13aa7ed
ci: build HUB75 envs in release workflow
netmindz May 2, 2026
2ceeb67
Relax panel limit for devices with PSRAM
netmindz May 2, 2026
923a1ec
fix(ui): derive hasPSRAM from psrSz capability, not free bytes
netmindz May 2, 2026
129c68c
Add support for HD-WF2 ESP32-S3 (HUB75 without PSRAM)
netmindz May 3, 2026
28b4419
Update platformio configurations for 16MB ESP32-S3 MoonHub (HUB75) board
netmindz May 3, 2026
86a218e
Skip GPIO validation for HUB75 types in pin checks and clarify slot u…
netmindz May 3, 2026
a083217
move platformio_release.ini.template to .github/ for cleaner project …
netmindz May 3, 2026
0d93ca8
Merge pull request #5553 from intermittech/add-quinled-v4-ethernet-pr…
netmindz May 3, 2026
dd01940
Fixes issue in Dissolve when a palette has same color pixel as the cu…
BobLoeffler68 May 3, 2026
dd0a83f
align settings overview page width with rest of config pages
DedeHai May 2, 2026
7d999a6
16.0.0-rc1
netmindz May 3, 2026
f90990b
Upload then add notes
netmindz Apr 11, 2026
4374f01
16.0.0
netmindz May 3, 2026
70ceb0d
fix(Fix_unreachable_netservices_v2): v16 compatibility fixes
Joeboyc2 May 10, 2026
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
113 changes: 113 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
#
# CodeRabbit configuration — references existing guideline files to avoid
# duplicating conventions. See:
# .github/copilot-instructions.md — project overview & general rules
# docs/cpp.instructions.md — C++ coding conventions
# docs/web.instructions.md — Web UI coding conventions
# docs/cicd.instructions.md — GitHub Actions / CI-CD conventions
#
# NOTE: This file must be committed (tracked by git) for CodeRabbit to read
# it from the repository. If it is listed in .gitignore, CodeRabbit will
# not see it and these settings will have no effect.

language: en-US

reviews:
# generic review setting, see https://docs.coderabbit.ai/reference/configuration#reference
auto_apply_labels: true
# abort_on_close: false
high_level_summary: true
review_status: true
collapse_walkthrough: false
poem: false
# sequence_diagrams: false
auto_review:
enabled: true
ignore_title_keywords:
- WIP

path_instructions:
- path: "**/*.{cpp,h,hpp,ino}"
instructions: >
Follow the C++ coding conventions documented in docs/cpp.instructions.md
and the general project guidelines in .github/copilot-instructions.md.

Key rules: 2-space indentation (no tabs), camelCase functions/variables,
PascalCase classes, UPPER_CASE macros. No C++ exceptions — use return codes and debug macros.

Hot-path optimization guidelines (attributes, uint_fast types, caching,
unsigned range checks) apply from pixel set/get operations and strip.show() downward —
NOT to effect functions in FX.cpp, which have diverse contributor styles.
# disabled - the below instruction has no effect
# When initially reviewing a PR, summarize good practices (top 5) and create a prioritized list of suggested improvements (focus on major ones).

- path: "wled00/data/**"
instructions: >
Follow the web UI conventions documented in docs/web.instructions.md.

Key rules: indent HTML and JavaScript with tabs, CSS with tabs.
Files here are built into wled00/html_*.h and wled00/js_*.h by tools/cdata.js — never
edit those generated headers directly.
# disabled - the below instruction has no effect
# When initially reviewing a PR, summarize good practices (top 5) and create a prioritized list of suggested improvements (focus on major ones).

- path: "wled00/html_*.h"
instructions: >
These files are auto-generated from wled00/data/ by tools/cdata.js.
They must never be manually edited or committed. Flag any PR that
includes changes to these files.

- path: "wled00/js_*.h"
instructions: >
These files are auto-generated from wled00/data/ by tools/cdata.js.
They must never be manually edited or committed. Flag any PR that
includes changes to these files.

- path: "usermods/**"
instructions: >
Usermods are community add-ons.
Each usermod lives in its own directory under usermods/ and is implemented
as a .cpp file with a dedicated library.json file to manage dependencies.
Follow the same C++ conventions as the core firmware (docs/cpp.instructions.md).
# disabled - the below instruction has no effect
# When initially reviewing a PR, summarize good practices (top 6) and create a prioritized list of suggested improvements (skip minor ones).

- path: ".github/workflows/*.{yml,yaml}"
instructions: >
Follow the CI/CD conventions documented in docs/cicd.instructions.md.

Key rules: 2-space indentation, descriptive name: on every workflow/job/step.
Third-party actions must be pinned to a specific version tag — branch pins
such as @main or @master are not allowed. Declare explicit permissions: blocks
scoped to least privilege. Never interpolate github.event.* values directly
into run: steps — pass them through an env: variable to prevent script
injection. Do not use pull_request_target unless fully justified.
# disabled - the below instruction has no effect
# When initially reviewing a PR, summarize good practices (top 6) and create a prioritized list of suggested improvements.

- path: "**/*.instructions.md"
instructions: |
This file contains both AI-facing rules and human-only reference sections.
Human-only sections are enclosed in `<!-- HUMAN_ONLY_START -->` /
`<!-- HUMAN_ONLY_END -->` HTML comment markers and should not be used as
actionable review criteria.

When this file is modified in a PR, perform the following alignment check:
1. For each `<!-- HUMAN_ONLY_START --> ... <!-- HUMAN_ONLY_END -->` block,
verify that its examples and guidance are consistent with (and do not
contradict) the AI-facing rules stated in the same file.
2. Flag any HUMAN_ONLY section whose content has drifted from the surrounding
AI-facing rules due to edits introduced in this PR.
3. If new AI-facing rules were added without updating a related HUMAN_ONLY
reference section, note this as a suggestion (not a required fix).

finishing_touches:
# Docstrings | Options for generating Docstrings for your PRs/MRs.
docstrings:
# Docstrings | Allow CodeRabbit to generate docstrings for PRs/MRs.
# default: true - disabled in WLED: has caused confusion in the past
enabled: false
unit_tests:
# default: true - disabled in WLED: we don't have a unit test framework, this option just confuses contributors
enabled: false
120 changes: 120 additions & 0 deletions .github/agent-build.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
applyTo: "**"
---
# Agent-Mode Build & Test Instructions

Detailed build workflow, timeouts, and troubleshooting for making code changes in agent mode. Always reference these instructions first when running builds or validating changes.

## Build Timing and Timeouts

Use these timeout values when running builds:

| Command | Typical Time | Minimum Timeout | Notes |
|---|---|---|---|
| `npm run build` | ~3 s | 30 s | Web UI → `wled00/html_*.h` `wled00/js_*.h` headers |
| `npm test` | ~40 s | 2 min | Validates build system |
| `npm run dev` | continuous | — | Watch mode, auto-rebuilds on changes |
| `pio run -e <env>` | 15–20 min | 30 min | First build downloads toolchains; subsequent builds are faster |

**NEVER cancel long-running builds.** PlatformIO downloads and compilation require patience.

## Development Workflow

### Code Style Summary
- **C++** files in `wled00/` and `usermods/`: 2-space indentation (no tabs), camelCase functions/variables, PascalCase classes, UPPER_CASE macros. No C++ exceptions — use return codes and debug macros.
- **Web UI** files in `wled00/data`: indent HTML and JavaScript with tabs, CSS with tabs.
- **CI/CD workflows** in `.github/workflows`: 2-space indentation, descriptive `name:` on every workflow/job/step. Third-party actions must be pinned to a specific version tag — branch pins such as `@main` or `@master` are not allowed. SHA pinning recommended.

### Web UI Changes

1. Edit files in `wled00/data/`
2. Run `npm run build` to regenerate `wled00/html_*.h` `wled00/js_*.h` headers
3. Test with local HTTP server (see Manual Testing below)
4. Run `npm test` to validate

### Firmware Changes

1. Edit files in `wled00/` (but **never** `html_*.h` and `js_*.h` files)
2. Ensure web UI is built first: `npm run build`
3. Build firmware: `pio run -e esp32dev` (set timeout ≥ 30 min)
4. Flash to device: `pio run -e [target] --target upload`

### Combined Web + Firmware Changes

1. Always build web UI first
2. Test web interface manually
3. Then build and test firmware


## Before Finishing Work - Testing

**You MUST complete ALL of these before marking work as done:**

1. **Run tests**: `npm test` — must pass
2. **Build firmware**: `pio run -e esp32dev` — must succeed after source code changes, **never skip this step**.
- Set timeout to 30+ minutes, **never cancel**
- Choose `esp32dev` as a common, representative environment
- If the build fails, fix the issue before proceeding
3. **For web UI changes**: manually test the interface (see below)

If any step fails, fix the issue. **Do NOT mark work complete with failing builds or tests.**

## Manual Web UI Testing

Start a local server:

```sh
cd wled00/data && python3 -m http.server 8080
# Open http://localhost:8080/index.htm
```

Test these scenarios after every web UI change:

- **Load**: `index.htm` loads without JavaScript errors (check browser console)
- **Navigation**: switching between main page and settings pages works
- **Color controls**: color picker and brightness controls function correctly
- **Effects**: effect selection and parameter changes work
- **Settings**: form submission and validation work

## Troubleshooting

### Common Build Issues

| Problem | Solution |
|---|---|
| Missing `html_*.h` | Run `npm ci; npm run build` |
| Web UI looks broken | Check browser console for JS errors |
| PlatformIO network errors | Retry — downloads can be flaky |
| Node.js version mismatch | Ensure Node.js 20+ (check `.nvmrc`) |

### Recovery Steps

- **Force web UI rebuild**: `npm run build -- -f`
- **Clear generated files**: `rm -f wled00/html_*.h wled00/js_*.h` then `npm run build`
- **Clean PlatformIO build artifacts**: `pio run --target clean`
- **Reinstall Node deps**: `rm -rf node_modules && npm ci`

## CI/CD Validation

The GitHub Actions CI workflow will:
1. Install Node.js and Python dependencies
2. Run `npm test`
3. Build web UI (automatic via PlatformIO)
4. Compile firmware for **all** `default_envs` targets

**To ensure CI success, always validate locally:**
- Run `npm test` and ensure it passes
- Run `pio run -e esp32dev` (or another common firmware environment, see next section) and ensure it completes successfully
- If either fails locally, it WILL fail in CI

Match this workflow in local development to catch failures before pushing.

## Important Reminders

- Always **commit source code**
-  Every pull request MUST include a clear description of *what* changed and *why*.
- **Never edit or commit** `wled00/html_*.h` and `wled00/js_*.h` — auto-generated from `wled00/data/`
- After modifying source code files, check that any **previous comments have been preserved** or updated to reflect the new behaviour.
- Web UI rebuild is part of the PlatformIO firmware compilation pipeline
- Common environments: `nodemcuv2`, `esp32dev`, `esp8266_2m`, `esp32c3dev`, `esp32s3dev_8MB_opi`
- List all PlatformIO targets: `pio run --list-targets`
Loading