Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
184 commits
Select commit Hold shift + click to select a range
d6cd65e
ota_update: Clean up SHA API
willmmiles Nov 28, 2025
0b965ea
ota_update: Fix hex print
willmmiles Nov 28, 2025
3793432
ota_update: Fix NRVO in getBootloaderSHA256Hex
willmmiles Nov 28, 2025
247a7a5
Initial plan
Copilot Dec 9, 2025
6a2b799
Add "Yes, Always" option to upgrade prompt and improve messaging
Copilot Dec 9, 2025
6ca8ed6
Address code review feedback: use boolean coercion instead of logical OR
Copilot Dec 9, 2025
1585cab
Add source version check to OTA update
willmmiles Nov 8, 2025
ba21ab5
Implement correct update version check
willmmiles Nov 9, 2025
788c099
Remove OTA metadata structure version block
willmmiles Dec 20, 2025
51a14ed
OTA: Report metadata v1 as workaround
willmmiles Dec 20, 2025
c0d662a
Swap DMX output to also use esp_dmx
netmindz Jan 10, 2026
37732ca
Temp enable DMX Output in all builds
netmindz Jan 10, 2026
96d4489
WLED_GLOBAL needed for dmx field to prevent linker errors
netmindz Jan 10, 2026
84ce66f
ass ifdef for 8266
netmindz Jan 10, 2026
d40f0f6
Set output pin during init
netmindz Jan 10, 2026
7d3a673
Remove lazy init
netmindz Jan 10, 2026
d336b97
set output pin
netmindz Jan 10, 2026
576b628
Allow runtime config of DMX output pin
netmindz Jan 10, 2026
2f874cf
remove redundant code
netmindz Jan 10, 2026
034e4f5
register pin with PinManager
netmindz Jan 10, 2026
834c285
default output pin to -1
netmindz Jan 10, 2026
22aff94
move dmx definition back to original location
netmindz Jan 10, 2026
585d174
minor cleanup
netmindz Jan 10, 2026
7a910c8
minor cleanup, code style
netmindz Jan 10, 2026
5cdca58
Fix naming
netmindz Jan 11, 2026
48168ed
write data
netmindz Jan 11, 2026
d1d9dec
Fix gamma correction for color not enabled on fresh install (#5225)
Copilot Jan 12, 2026
ba5cf9c
night build script updates
softhack007 Jan 16, 2026
8a3cb46
Update contributing guidelines for PR management
softhack007 Jan 16, 2026
45acb44
Fix typo in CONTRIBUTING.md
softhack007 Jan 16, 2026
7a9e7f9
Enhance contributing guidelines for pull requests
softhack007 Jan 17, 2026
10df03e
reorder sections for clarity
softhack007 Jan 17, 2026
a024935
adding a screenshot for simple PR creation
softhack007 Jan 17, 2026
1773f61
bugfix: do not disable "unused" pin type - um_p[] always contains "-1…
DedeHai Jan 18, 2026
af8db57
Fix for cfg exceeding LED limit (#4939)
DedeHai Jan 19, 2026
be90073
fix button byte comment
ChuckMash Jan 22, 2026
99c3f68
Merge pull request #5307 from ChuckMash/main
DedeHai Jan 22, 2026
d9cc751
Adding sequential resource loading to edit.htm (#5306)
DedeHai Jan 23, 2026
df94a8d
Remove MAX_LEDS_PER_BUS limitation for virtual buses (#5238)
Copilot Jan 23, 2026
96f4234
Reduce flash size of TetrisAI_V2 by 97%
gustebeast Jan 21, 2026
ca1d661
Add option to save unmodified presets to autosave usermod (#5175)
mtin Jan 24, 2026
9683896
Merge pull request #5317 from gustebeast/wled-gtb-flash-size
softhack007 Jan 27, 2026
e867fca
Change default LED pin to 4 in Ethernet builds
softhack007 Jan 27, 2026
8d39dac
ethernet: avoid dangerous pins
softhack007 Jan 27, 2026
a64334c
correct wrong AR build flag
softhack007 Jan 27, 2026
81af160
disable repeating warning, set all AR pins to "unused"
softhack007 Jan 28, 2026
4e07296
Merge pull request #5323 from wled/ethernet_led_pin
softhack007 Jan 28, 2026
857e73a
adding image rotation to PixelForge gif tool (#5309)
DedeHai Jan 28, 2026
c9f47d4
new ESP32 node types
softhack007 Jan 28, 2026
1031e70
Replace buffer lock magic numbers with defines (#5217)
DedeHai Jan 30, 2026
f19d29c
add json validation to file inputs in UI and minify before upload (#5…
DedeHai Jan 30, 2026
d4f365e
Simplify prompt to 2 buttons + checkbox per feedback
Copilot Jan 30, 2026
50ef8db
Fix double toast messages and improve error handling
Copilot Jan 30, 2026
39bf31d
Change button text from "Report this update" to "Report update"
Copilot Jan 30, 2026
2c4ed42
New custom palettes editor (#5010)
DedeHai Jan 30, 2026
354da8f
Fix automatic reporting to preserve alwaysReport preference
Copilot Jan 31, 2026
ba677d1
Merge remote-tracking branch 'upstream/main' into cleanup-bootloader-sha
willmmiles Jan 31, 2026
1ca55e4
fix relay not turning on at boot (#5315)
DedeHai Jan 31, 2026
6d788a2
Fix heap checks in bootloader update
willmmiles Jan 31, 2026
7816609
Bootloader upload validation cleanup
willmmiles Jan 31, 2026
b51e7b6
Factor out bootloader size estimate
willmmiles Jan 31, 2026
76c25da
Use bootloader size in hash calculation
willmmiles Jan 31, 2026
642c99a
Stream bootloader size validation
willmmiles Jan 31, 2026
03d0522
Fix null test
willmmiles Jan 31, 2026
2434a96
Ensure bootloader hashes match
willmmiles Jan 31, 2026
761eb99
Fix update UI
willmmiles Feb 1, 2026
f2df029
Disable boot loader debug prints
willmmiles Feb 1, 2026
3d33bae
Add support for WPA-Enterprise (#5194)
benjaminkraus Feb 1, 2026
6b953d9
Fix 5168 (#5181)
willmmiles Feb 1, 2026
a6b107e
Accept rabbit's fixes
willmmiles Feb 1, 2026
eb4bd6f
Update pin_manager.cpp
wled-install Feb 2, 2026
680ef26
Update pin_manager.cpp
wled-install Feb 2, 2026
2676ac7
apply inverse gamma to segment brightness for better color preservati…
DedeHai Feb 4, 2026
0c08c27
CONTRIBUTING.md minor formatting updates for easier reading
softhack007 Feb 5, 2026
c64b1e3
Fix typo in CONTRIBUTING.md
softhack007 Feb 5, 2026
0120b1a
Add user_fx installation instructions and a usermod config example (#…
gustebeast Feb 6, 2026
129137d
Add new build for esp32s3dev_8MB_qspi
softhack007 Feb 6, 2026
1473840
Fix the hiding of the lack of dmx output support message for builds t…
netmindz Feb 6, 2026
4d63b3c
Merge pull request #5353 from netmindz/dmx-output-enabled-error
netmindz Feb 6, 2026
747bc2b
filter out "external" in nigtly build changelog
softhack007 Feb 7, 2026
2102bb1
Tweak the welcome page to be more appropriate
netmindz Feb 7, 2026
8b6d413
Improved Contributor Guidelines & Education (#5348, part1) (#5350)
softhack007 Feb 7, 2026
591f65f
Upgrade platform to 4.4.8
netmindz Feb 7, 2026
65daf26
Disable pixels_dice_tray - incompatible due to BLE dependency
netmindz Feb 7, 2026
6d1d494
Extend I2S swapped channel workaround to all 4.4.x versions
softhack007 Feb 7, 2026
e9ced6d
Merge pull request #5356 from netmindz/welcome-update
netmindz Feb 7, 2026
80e7513
Full WiFi scan and apply BSSID if used (#5351)
DedeHai Feb 8, 2026
7387baa
Remove gamma value lower limit to enable inverse gamma correction (#5…
flo269 Feb 8, 2026
7a157a8
Add experimental ESP32-C6 and ESP32-C5 options to bugreport template
softhack007 Feb 8, 2026
b9138b4
show experimental MCUs in nodes list
softhack007 Feb 8, 2026
6b70c6a
Remove FRAMETIME return value from all FX (#5314)
DedeHai Feb 9, 2026
e3bc32a
remove dead (and dangerous) mutex macros in bus_manager.cpp (#5364)
softhack007 Feb 9, 2026
6bebb8b
Merge pull request #5338 from wled-install/patch-3
softhack007 Feb 10, 2026
f09c449
clarification
softhack007 Feb 10, 2026
ce31d80
add esp-idf managed folders to .gitignore
softhack007 Feb 11, 2026
f830ea4
Clean up global variables namespace, save a few 100 bytes of flash (#…
softhack007 Feb 11, 2026
d1ed547
Improved bus handling: free choice of bus driver in any order and imp…
DedeHai Feb 14, 2026
1ee42f0
change version scheme to Major.minor, drop leading "0."
softhack007 Feb 14, 2026
e0441c8
Bugfix: some UI pages were missing lang="en"
softhack007 Feb 19, 2026
14bd5d6
Improvements to UI settings readability (#5328)
DedeHai Feb 19, 2026
6240ee6
Merge pull request #5381 from wled/ui_lang_en
softhack007 Feb 19, 2026
29e9c73
Make omggif.js available as an independent resource, improved sequent…
DedeHai Feb 20, 2026
43e86d0
Add Pin Info: overview of used and available Pins (#5361)
DedeHai Feb 20, 2026
1f102ca
Fix LED-animations briefly pausing at bootup (ESP32 only) (#5337)
DedeHai Feb 20, 2026
439d4a0
Merge pull request #5357 from netmindz/idf_4_4_8
netmindz Feb 20, 2026
822e07d
fix boot-up wifi pause even with extended scanning
DedeHai Feb 21, 2026
2d1315f
Bump minimatch and nodemon
dependabot[bot] Feb 23, 2026
4178d05
Merge pull request #5393 from wled/dependabot/npm_and_yarn/multi-8e76…
netmindz Feb 23, 2026
522927e
fix for I2S ressource conflict with ethernet (aPLL) - V4 builds only
softhack007 Feb 24, 2026
d3a8da2
UI improvement: PDM is not a standard I2S microphone
softhack007 Feb 24, 2026
536b40c
Fix start & end of segment not "flowing" in Flow FX (#5392)
DedeHai Feb 26, 2026
231fb5a
Remove default checked state from versionSaveChoice
netmindz Feb 26, 2026
55c4288
Merge pull request #5128 from willmmiles/cleanup-bootloader-sha
netmindz Feb 26, 2026
1c8dd8e
extended CCT blending: exclusive blend, bugfix in CCT calculation (fi…
DedeHai Feb 26, 2026
6f65b46
Save version when skipping reporting to prevent re-prompting
Copilot Feb 26, 2026
1c2f705
Update version from 16.0-alpha to 16.0.0-alpha
netmindz Feb 27, 2026
3116e88
Bump minimatch from 10.2.2 to 10.2.4
dependabot[bot] Feb 27, 2026
3972b6e
Merge pull request #5401 from wled/dependabot/npm_and_yarn/minimatch-…
netmindz Feb 27, 2026
26d2cc9
Merge pull request #5396 from wled/bugfix_5391
softhack007 Feb 27, 2026
b97b46a
Use new section for dynamic arrays
willmmiles Nov 28, 2025
3bfbbab
Formalize dynarray system
willmmiles Dec 5, 2025
35d2671
bugfix: right shift on signed char is unsafe
softhack007 Mar 1, 2026
7fa1576
bugfix: prevent array bounds violations due to short WS payload data
softhack007 Mar 1, 2026
ac1a4df
validate_modules: Remove obsolete code
willmmiles Mar 2, 2026
1929267
Support lib_deps syntax in custom_usermods
willmmiles Mar 2, 2026
210b4d8
Add external usermod example
willmmiles Mar 2, 2026
5790309
Introduce comet effect usermod with fire particle system (#5347)
gustebeast Mar 2, 2026
bc229b8
Add flashing effect on line clear in TetrisAI_v2. (#5320)
gustebeast Mar 2, 2026
5f28406
Morse Code FX in the user_fx usermod (#5252)
BobLoeffler68 Mar 2, 2026
c604b99
add 3 more standard buttons to ESP-NOW Remote (#5400)
GLEDOPTO Mar 3, 2026
5f5f468
Ants FX in the user_fx usermod (#5251)
BobLoeffler68 Mar 3, 2026
0e1da4f
Magma FX in the user_fx usermod (#5360)
BobLoeffler68 Mar 4, 2026
278a1fb
Lava Lamp FX in the user_fx usermod (#5253)
BobLoeffler68 Mar 4, 2026
b07cd45
Bugfix in PS particle size for advanced particles
DedeHai Mar 4, 2026
cd1c5ca
Initial plan
Copilot Mar 6, 2026
9ae1ef5
Allow OTA upgrade between ESP32_V4 and ESP32 release names
Copilot Mar 6, 2026
05498f2
Apply fixes from code review
willmmiles Mar 7, 2026
1da5dc7
Merge pull request #5213 from willmmiles/update-source-version-check
willmmiles Mar 7, 2026
5e1ae99
Refactor normalizeReleaseName to use Arduino String for cleaner code
Copilot Mar 8, 2026
7f44396
validate_modules: Support LTO
willmmiles Mar 7, 2026
5beafe0
Merge pull request #5403 from willmmiles/custom-usermods-better
netmindz Mar 8, 2026
53d6c4b
Merge pull request #5172 from wled/copilot/update-install-prompt-mess…
netmindz Mar 8, 2026
3bfdb73
Fix usermod validation portability
willmmiles Mar 10, 2026
2ab9659
Speed up usermod validation
willmmiles Mar 10, 2026
c35358c
Display relase on info page
netmindz Mar 10, 2026
cfa93c9
Merge pull request #5416 from willmmiles/usermod-validation-path-matc…
willmmiles Mar 10, 2026
4044255
New smooth effect: Color Clouds (#5268)
JoaDick Mar 11, 2026
c7fa496
Spinning Wheel FX in the user_fx usermod (#5293)
BobLoeffler68 Mar 11, 2026
e4cd730
Info page: Total LEDs, GitHub repo, minor re-styling (#5418)
softhack007 Mar 11, 2026
f816b5f
bugfix #5295 - change remaining references to strip.paletteBlend into…
softhack007 Mar 12, 2026
64f3aa9
replace depricated ADC constant
softhack007 Mar 12, 2026
3244d0f
Clarify handling of generated html_*.h files
softhack007 Mar 13, 2026
19c178d
Update development workflow instructions
softhack007 Mar 13, 2026
34722aa
Update instructions for editing html_*.h files
softhack007 Mar 13, 2026
b57d51e
correction
softhack007 Mar 13, 2026
a63a307
Update PR review instructions for generated html files
softhack007 Mar 13, 2026
6f030e5
OTA update page restyling, automatically set download URL based on in…
softhack007 Mar 13, 2026
7e490fc
ensure that targetFPS is set to default on a fresh install (fixes #5408)
softhack007 Mar 13, 2026
7006285
Update language guidelines in copilot instructions
softhack007 Mar 16, 2026
aa6cd88
Fix typo
softhack007 Mar 16, 2026
610c80a
UI improvement: clearer tool icons and added text description (#5425)
DedeHai Mar 16, 2026
3b256ee
Merge branch 'main' into copilot/allow-upgrade-to-esp32
willmmiles Mar 16, 2026
f28cbea
Metadata compatibility cleanup
willmmiles Mar 16, 2026
a721264
Merge pull request #5407 from wled/copilot/allow-upgrade-to-esp32
netmindz Mar 18, 2026
93ef454
Swap DMX output to also use esp_dmx
netmindz Jan 10, 2026
cd08d6f
Temp enable DMX Output in all builds
netmindz Jan 10, 2026
c8ff292
WLED_GLOBAL needed for dmx field to prevent linker errors
netmindz Jan 10, 2026
b11c7f7
ass ifdef for 8266
netmindz Jan 10, 2026
d5061ed
Set output pin during init
netmindz Jan 10, 2026
1ccef16
Remove lazy init
netmindz Jan 10, 2026
4a60207
set output pin
netmindz Jan 10, 2026
3b92b2d
Allow runtime config of DMX output pin
netmindz Jan 10, 2026
ec64355
remove redundant code
netmindz Jan 10, 2026
02274e1
register pin with PinManager
netmindz Jan 10, 2026
b8fcb1c
default output pin to -1
netmindz Jan 10, 2026
306ba83
move dmx definition back to original location
netmindz Jan 10, 2026
f5522e6
minor cleanup
netmindz Jan 10, 2026
38330b5
minor cleanup, code style
netmindz Jan 10, 2026
daa2223
Fix naming
netmindz Jan 11, 2026
e28774d
write data
netmindz Jan 11, 2026
c20f59d
DMXInput: try to assign pins before UART port and default back to 1 i…
netmindz Mar 20, 2026
ea3aba9
DMXInput: No need to swap default pin for LED when DMX not hard-coded
netmindz Mar 20, 2026
ab632e9
DMXInput: Move allocation of pin to initDMXOutput
netmindz Mar 20, 2026
cf1f236
Merge remote-tracking branch 'netmindz/dmx-output-esp_dmx' into dmx-o…
netmindz Mar 20, 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
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ body:
- ESP32-S2
- ESP32-C3
- Other
- ESP32-C6 (experimental)
- ESP32-C5 (experimental)
validations:
required: true
- type: textarea
Expand Down
14 changes: 9 additions & 5 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ The build has two main phases:
### Code Validation
- **No automated linting configured** - follow existing code style in files you edit
- **Code style**: Use tabs for web files (.html/.css/.js), spaces (2 per level) for C++ files
- **Language**: The repository language is English (british, american, canadian, or australian). If you find other languages, suggest a translation into English.
- **C++ formatting available**: `clang-format` is installed but not in CI
- **Always run tests before finishing**: `npm test`
- **MANDATORY: Always run a hardware build before finishing** (see "Before Finishing Work" section below)
Expand All @@ -85,7 +86,7 @@ wled00/ # Main firmware source (C++)
│ ├── settings*.htm # Settings pages
│ └── *.js/*.css # Frontend resources
├── *.cpp/*.h # Firmware source files
└── html_*.h # Generated embedded web files (DO NOT EDIT)
└── html_*.h # Auto-generated embedded web files (DO NOT EDIT, DO NOT COMMIT)
tools/ # Build tools (Node.js)
├── cdata.js # Web UI build script
└── cdata-test.js # Test suite
Expand All @@ -101,7 +102,7 @@ package.json # Node.js dependencies and scripts
- `wled00/wled.h` - Main firmware configuration
- `platformio.ini` - Hardware build targets and settings

### Development Workflow
### Development Workflow (applies to agent mode only)
1. **For web UI changes**:
- Edit files in `wled00/data/`
- Run `npm run build` to regenerate headers
Expand Down Expand Up @@ -148,10 +149,13 @@ package.json # Node.js dependencies and scripts

## Important Notes

- **DO NOT edit `wled00/html_*.h` files** - they are auto-generated
- **Always commit both source files AND generated html_*.h files**
- **Web UI must be built before firmware compilation**
- **Always commit source files**
- **Web UI re-built is part of the platformio firmware compilation**
- **do not commit generated html_*.h files**
- **DO NOT edit `wled00/html_*.h` files** - they are auto-generated. If needed, modify Web UI files in `wled00/data/`.
- **Test web interface manually after any web UI changes**
- When reviewing a PR: the PR author does not need to update/commit generated html_*.h files - these files will be auto-generated when building the firmware binary.
- If updating Web UI files in `wled00/data/`, make use of common functions availeable in `wled00/data/common.js` where possible.
- **Use VS Code with PlatformIO extension for best development experience**
- **Hardware builds require appropriate ESP32/ESP8266 development board**

Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ jobs:
run: ls -la
- name: "✏️ Generate release changelog"
id: changelog
uses: janheinrichmerker/action-github-changelog-generator@v2.3
uses: janheinrichmerker/action-github-changelog-generator@v2.4
with:
token: ${{ secrets.GITHUB_TOKEN }}
sinceTag: v0.15.0
output: CHANGELOG_NIGHTLY.md
# Exclude issues that were closed without resolution from changelog
exclude-labels: 'stale,wontfix,duplicate,invalid'
excludeLabels: 'stale,wontfix,duplicate,invalid,external,question,use-as-is,not_planned'
- name: Update Nightly Release
uses: andelf/nightly-release@main
env:
Expand All @@ -37,7 +38,7 @@ jobs:
tag_name: nightly
name: 'Nightly Release $$'
prerelease: true
body: ${{ steps.changelog.outputs.changelog }}
body_path: CHANGELOG_NIGHTLY.md
files: |
*.bin
*.bin.gz
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ jobs:
merge-multiple: true
- name: "✏️ Generate release changelog"
id: changelog
uses: janheinrichmerker/action-github-changelog-generator@v2.3
uses: janheinrichmerker/action-github-changelog-generator@v2.4
with:
token: ${{ secrets.GITHUB_TOKEN }}
sinceTag: v0.15.0
maxIssues: 500
# Exclude issues that were closed without resolution from changelog
exclude-labels: 'stale,wontfix,duplicate,invalid'
excludeLabels: 'stale,wontfix,duplicate,invalid,external,question,use-as-is,not_planned'
- name: Create draft release
uses: softprops/action-gh-release@v1
with:
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
compile_commands.json
__pycache__/

/.dummy
/dependencies.lock
/managed_components

esp01-update.sh
platformio_override.ini
replace_fs.py
Expand All @@ -25,3 +29,4 @@ wled-update.sh
/wled00/Release
/wled00/wled00.ino.cpp
/wled00/html_*.h
/wled00/js_*.h
195 changes: 156 additions & 39 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,62 +1,177 @@
## Thank you for making WLED better!
# Thank you for making WLED better!

Here are a few suggestions to make it easier for you to contribute!
WLED is a community-driven project, and every contribution matters! We appreciate your time and effort.

### Describe your PR
Our maintainers are here for two things: **helping you** improve your code, and **keeping WLED** lean, efficient, and maintainable.
We'll work with you to refine your contribution, but we'll also push back if something might create technical debt or add features without clear value. Don't take it personally - we're just protecting WLED's architecture while helping your contribution succeed!

Please add a description of your proposed code changes. It does not need to be an exhaustive essay, however a PR with no description or just a few words might not get accepted, simply because very basic information is missing.
## Getting Started

Here are a few suggestions to make it easier for you to contribute:

### PR from a branch in your own fork
Start your pull request (PR) in a branch of your own fork. Don't make a PR directly from your main branch.
This lets you update your PR if needed, while you can work on other tasks in 'main' or in other branches.

> [!TIP]
> **The easiest way to start your first PR**
> When viewing a file in `wled/WLED`, click on the "pen" icon and start making changes.
> When you choose to 'Commit changes', GitHub will automatically create a PR from your fork.
>
> <img width="295" height="134" alt="image: fork and edit" src="https://github.com/user-attachments/assets/f0dc7567-edcb-4409-a530-cd621ae9661f" />

A good description helps us to review and understand your proposed changes. For example, you could say a few words about
* what you try to achieve (new feature, fixing a bug, refactoring, security enhancements, etc.)
* how your code works (short technical summary - focus on important aspects that might not be obvious when reading the code)
* testing you performed, known limitations, open ends you possibly could not solve.
* any areas where you like to get help from an experienced maintainer (yes WLED has become big 😉)

### Target branch for pull requests

Please make all PRs against the `main` branch.

### Describing your PR

Please add a description of your proposed code changes.
A PR with no description or just a few words might not get accepted, simply because very basic information is missing.
No need to write an essay!

A good description helps us to review and understand your proposed changes. For example, you could say a few words about
* What you try to achieve (new feature, fixing a bug, refactoring, security enhancements, etc.)
* How your code works (short technical summary - focus on important aspects that might not be obvious when reading the code)
* Testing you performed, known limitations, anything you couldn't quite solve.
* Let us know if you'd like guidance from a maintainer (WLED is a big project 😉)

### Testing Your Changes

Before submitting:

- ✅ Does it compile?
- ✅ Does your feature/fix actually work?
- ✅ Did you break anything else?
- ✅ Tested on actual hardware if possible?

Mention your testing in the PR description (e.g., "Tested on ESP32 + WS2812B").

## During Review

We're all volunteers, so reviews can take some time (longer during busy times).
Don't worry - we haven't forgotten you! Feel free to ping after a week if there's no activity.

### Updating your code
While the PR is open - and under review by maintainers - you may be asked to modify your PR source code.
You can simply update your own branch, and push changes in response to reviewer recommendations.
Github will pick up the changes so your PR stays up-to-date.
While the PR is open, you can keep updating your branch - just push more commits! GitHub will automatically update your PR.

> [!CAUTION]
You don't need to squash commits or clean up history - we'll handle that when merging.

> [!CAUTION]
> Do not use "force-push" while your PR is open!
> It has many subtle and unexpected consequences on our github reposistory.
> For example, we regularly lost review comments when the PR author force-pushes code changes. So, pretty please, do not force-push.
> It has many subtle and unexpected consequences on our GitHub repository.
> For example, we regularly lose review comments when the PR author force-pushes code changes. Our review bot (coderabbit) may become unable to properly track changes, it gets confused or stops responding to questions.
> So, pretty please, do not force-push.

> [!TIP]
> use [cherry-picking](https://docs.github.com/en/desktop/managing-commits/cherry-picking-a-commit-in-github-desktop) to copy commits from one branch to another.
> Use [cherry-picking](https://docs.github.com/en/desktop/managing-commits/cherry-picking-a-commit-in-github-desktop) to copy commits from one branch to another.


### Responding to Reviews

When we ask for changes:

- **Add new commits** - please don't amend or force-push
- **Reply in the PR** - let us know when you've addressed comments
- **Ask questions** - if something's unclear, just ask!
- **Be patient** - we're all volunteers here 😊

You can reference feedback in commit messages:
> ```text
> Fix naming per @Aircoookie's suggestion
> ```

### Dealing with Merge Conflicts

Got conflicts with `main`? No worries - here's how to fix them:

**Using GitHub Desktop** (easier for beginners):

You can find a collection of very useful tips and tricks here: https://github.com/wled-dev/WLED/wiki/How-to-properly-submit-a-PR
1. Click **Fetch origin**, then **Pull origin**
2. If conflicts exist, GitHub Desktop will warn you - click **View conflicts**
3. Open the conflicted files in your editor (VS Code, etc.)
4. Remove the conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) and keep the correct code
5. Save the files
6. Back in GitHub Desktop, commit the merge (it'll suggest a message)
7. Click **Push origin**

**Using command line**:

```bash
git fetch origin
git merge origin/main
# Fix conflicts in your editor
git add .
git commit
git push
```

Either way works fine - pick what you're comfortable with! Merging is simpler than rebasing and keeps everything connected.

#### When you MUST rebase (really rare!)

Sometimes you might hit merge conflicts with `main` that are harder to solve. Here's what to try:

1. **Merge instead of rebase** (safest option):
```bash
git fetch origin
git merge origin/main
git push
```
Keeps review comments attached and CI results visible!

2. **Use cherry-picking** to copy commits between branches without rewriting history - [here's how](https://docs.github.com/en/desktop/managing-commits/cherry-picking-a-commit-in-github-desktop).

3. **If all else fails, use `--force-with-lease`** (not plain `--force`):
```bash
git rebase origin/main
git push --force-with-lease
```
Then **leave a comment** explaining why you had to force-push, and be ready to re-address some feedback.

### Additional Resources
Want to know more? Check out:
- 📚 [GitHub Desktop documentation](https://docs.github.com/en/desktop) - if you prefer GUI tools
- 🎓 [How to properly submit a PR](https://github.com/wled-dev/WLED/wiki/How-to-properly-submit-a-PR) - detailed tips and tricks


## After Approval
Once approved, a maintainer will merge your PR (possibly squashing commits).
Your contribution will be in the next WLED release - thank you! 🎉


## Coding Guidelines

### Source Code from an AI agent or bot
> [!IMPORTANT]
> Its OK if you took help from an AI for writing your source code.
> It's OK if you took help from an AI for writing your source code.
>
> However, we expect a few things from you as the person making a contribution to WLED:
* Make sure you really understand the code suggested by the AI, and don't just accept it because it "seems to work".
> AI tools can be very helpful, but as the contributor, **you're responsible for the code**.

* Make sure you really understand the AI-generated code, don't just accept it because it "seems to work".
* Don't let the AI change existing code without double-checking by you as the contributor. Often, the result will not be complete. For example, previous source code comments may be lost.
* Remember that AI are still "Often-Wrong" ;-)
* If you don't feel very confident using English, you can use AI for translating code comments and descriptions into English. AI bots are very good at understanding language. However, always check if the results is correct. The translation might still have wrong technical terms, or errors in some details.
* Remember that AI is still "Often-Wrong" ;-)
* If you don't feel confident using English, you can use AI for translating code comments and descriptions into English. AI bots are very good at understanding language. However, always check if the results are correct. The translation might still have wrong technical terms, or errors in some details.

#### Best Practice with AI

#### best practice with AI:
* As the person who contributes source code to WLED, make sure you understand exactly what the AI generated code does
* best practice: add a comment like ``'// below section of my code was generated by an AI``, when larger parts of your source code were not written by you personally.
* always review translations and code comments for correctness
* always review AI generated source code
* If the AI has rewritten existing code, check that the change is necessary and that nothing has been lost or broken. Also check that previous code comments are still intact.
AI tools are powerful but "often wrong" - your judgment is essential! 😊

- ✅ **Understand the code** - As the person contributing to WLED, make sure you understand exactly what the AI-generated source code does
- ✅ **Review carefully** - AI can lose comments, introduce bugs, or make unnecessary changes
- ✅ **Be transparent** - Add a comment like `// This section was AI-generated` for larger chunks
- ✅ **Use AI for translation** - AI is great for translating comments to English (but verify technical terms!)

### Code style

When in doubt, it is easiest to replicate the code style you find in the files you want to edit :)
Below are the guidelines we use in the WLED repository.
Don't stress too much about style! When in doubt, just match the style in the files you're editing. 😊

Here are our main guidelines:

#### Indentation

We use tabs for Indentation in Web files (.html/.css/.js) and spaces (2 per indentation level) for all other files.
We use tabs for indentation in Web files (.html/.css/.js) and spaces (2 per indentation level) for all other files.
You are all set if you have enabled `Editor: Detect Indentation` in VS Code.

#### Blocks
Expand All @@ -74,7 +189,7 @@ if (a == b) {
if (a == b) doStuff(a);
```

Acceptable - however the first variant is usually easier to read:
Also acceptable (though the first style is usually easier to read):
```cpp
if (a == b)
{
Expand Down Expand Up @@ -105,20 +220,22 @@ if( a==b ){
#### Comments

Comments should have a space between the delimiting characters (e.g. `//`) and the comment text.
Note: This is a recent change, the majority of the codebase still has comments without spaces.
We're gradually adopting this style - don't worry if you see older code without spaces!

Good:
```
// This is a comment.

/* This is a CSS inline comment */
```cpp
// This is a short inline comment.

/*
* This is a comment
* This is a longer comment
* wrapping over multiple lines,
* used in WLED for file headers and function explanations
*/

```
```css
/* This is a CSS inline comment */
```
```html
<!-- This is an HTML comment -->
```

Expand Down
Loading
Loading