Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1343 commits
Select commit Hold shift + click to select a range
a73a2aa
restore missing platform_packages references
softhack007 Nov 10, 2025
7addae9
restore missing build flag for esp32
softhack007 Nov 10, 2025
bd933ff
fix for "missing esp32 build flag"
softhack007 Nov 10, 2025
a666f07
fix off-by-one bug, remove unnecessary 16384 restriction
DedeHai Nov 11, 2025
3b14c31
fix noScale callback, allow for more blur, removed some whitespaces
DedeHai Nov 11, 2025
79376bb
improved lastCoordinate calculation
DedeHai Nov 13, 2025
fc776ee
add comment to explain coordinate packing logic
softhack007 Nov 14, 2025
6ae4b1f
comment to prevent future "false improvement" attempts
softhack007 Nov 14, 2025
f95dae1
ensure that lastFilename is always terminated properly
softhack007 Nov 14, 2025
cd2dc43
replace magic number by constant
softhack007 Nov 14, 2025
4f93661
Improved 1D support for GIF images, bugfixes, blur option by @DedeHa…
DedeHai Nov 14, 2025
f1d708c
Merge pull request #5073 from DedeHai/ledmap_bugfixes
DedeHai Nov 15, 2025
1948293
Fix OTA update for C3 from 0.15 (#5072)
DedeHai Nov 15, 2025
66ffd65
Add deviceId to JSON info respose, to be used for the post-upgrade no…
netmindz Nov 15, 2025
4f96886
fix for low heap situations on ESP8266
DedeHai Nov 16, 2025
8348089
speed improvements to Aurora FX (#4926)
DedeHai Nov 16, 2025
271e9ac
image loader: allow graceful takeover after error
softhack007 Nov 17, 2025
c649ec1
Update wled00/json.cpp
netmindz Nov 17, 2025
d1ed584
fix for #4298 - no conflict with DMX output
netmindz Nov 17, 2025
65c43b5
add ctrl+s support to file editor, also add toast instead of alert
DedeHai Nov 17, 2025
4db86eb
Add salf and checksum
netmindz Nov 18, 2025
85b3c5d
refactor to use a common sha1 function
netmindz Nov 18, 2025
aaad450
show minimum of 0.1KB for small files in file editor
DedeHai Nov 18, 2025
336e074
fix for 0byte size files, also made reading ledmaps more efficient
DedeHai Nov 18, 2025
4a33809
make waitForIt() timing logic robust against millis() rollover
softhack007 Nov 18, 2025
54b7dfe
Fix debug message for servicing wait
softhack007 Nov 18, 2025
c1ce1d8
salt using additional hardware details
netmindz Nov 19, 2025
a2935b8
deviceString for 8266
netmindz Nov 19, 2025
1860258
deviceString for esp32
netmindz Nov 19, 2025
b90fbe6
fix whitespace
netmindz Nov 19, 2025
a1aac45
use correct value for deviceString for 8266 and add comments
netmindz Nov 20, 2025
3dbcd79
Add efuse based data to salt
netmindz Nov 21, 2025
9b787e1
swap to using ESP.getFlashChipId for the 8266
netmindz Nov 21, 2025
4615eb8
Merge pull request #5093 from netmindz/deviceId
netmindz Nov 22, 2025
5b3cc75
partition files for use with ADAFRUIT boards
softhack007 Nov 22, 2025
49a1ae5
update for S3 buildenvs, and support for 32MB Flash
softhack007 Nov 22, 2025
7dfed58
add esp32S3_wroom2 to default build
softhack007 Nov 22, 2025
d8e2cee
buildenv updates for adafruit MatrixPortal S3
softhack007 Nov 22, 2025
eb03520
Update platformio_override.sample.ini
softhack007 Nov 22, 2025
d7fd49c
fix wrong -D SR_DMTYPE=-1 in platformio_override.sample.ini
softhack007 Nov 22, 2025
90ca6cc
AR: handle stupid build flag SR_DMTYPE=-1
softhack007 Nov 22, 2025
730205d
AR: SR_DMTYPE=254 => UDP sound receive only (experimental)
softhack007 Nov 22, 2025
1e081a7
PS 1D Firwork bugfixes and improvements
DedeHai Nov 23, 2025
d1c4de2
Merge pull request #5107 from wled/s3_wroom2_32MB
softhack007 Nov 25, 2025
28d8a1c
crash-safe version of ID generation using only IDF functions
DedeHai Nov 25, 2025
c534328
return String not uint
DedeHai Nov 25, 2025
eb87fbf
dont assume initialization of 0, be explicit.
DedeHai Nov 25, 2025
f12e3e0
set default AP channel to 7 to help with bad antennas
DedeHai Nov 26, 2025
fc7993f
update default AP channel to 6, possible fix for "AP does not show" (…
DedeHai Nov 26, 2025
fca921e
Adding "Complete" mode to Dissolve FX: always fades completely (#5016)
DedeHai Nov 26, 2025
e761418
adding legacy support for "edit?list=/" command, fix indentation (#5092)
DedeHai Nov 26, 2025
6b607fb
refined PS replacement ifdefs (#5103)
DedeHai Nov 26, 2025
571ab67
Update to use deviceId
netmindz Nov 22, 2025
b6f3cb6
Use deviceId not mac
netmindz Nov 22, 2025
49a25af
Fix styling issues
netmindz Nov 22, 2025
61f5737
Remove MB suffix
netmindz Nov 22, 2025
17e91a7
Remove K suffix
netmindz Nov 22, 2025
579021f
trigger reportUpgradeEvent
netmindz Nov 26, 2025
ce6577e
add caching back
DedeHai Nov 27, 2025
8bc434b
Update working to Aircoookie's suggestion
netmindz Nov 27, 2025
33411f0
Reformat to tabs
netmindz Nov 27, 2025
a9811c2
Variable button count (up to 32) (#4757)
blazoncek Nov 27, 2025
dc5732a
Merge pull request #5111 from DedeHai/safe_UID_generation
netmindz Nov 27, 2025
fc25eb2
Merge pull request #5116 from wled/add-report-version-feature
netmindz Nov 27, 2025
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
75a7ed1
Fix stale UI after firmware updates (#5120)
Copilot Nov 28, 2025
a897271
Convert PSRAM to MB in usage reporting (#5130)
Copilot Nov 28, 2025
b5f13e4
FIX for adafruit portal S3: remove extra flash section & use default …
DedeHai Nov 30, 2025
4fa4bc8
Fix ESP8266 DMA off-by-one
willmmiles Dec 1, 2025
5d4fdb1
Merge pull request #5138 from willmmiles/esp8266-dma-fix
netmindz Dec 1, 2025
e1f5bbf
avoid #define in generateDeviceFingerprint()
softhack007 Nov 28, 2025
9eda32b
add bootloader offsets for -C3, S3, and some future MCU's
softhack007 Nov 29, 2025
a0eec81
allow different bootloader sizes for each MCU
softhack007 Nov 29, 2025
653e039
Update repository URLs in package.json
softhack007 Dec 1, 2025
a947e8f
Initial plan
Copilot Dec 1, 2025
a2c1ad0
Fix usermods.yml to only run for external fork PRs
Copilot Dec 1, 2025
7c6a1d7
Remove push trigger, only run usermods CI for external fork PRs
Copilot Dec 1, 2025
ae37f42
platformio.ini: short hashes => long hashes
softhack007 Dec 1, 2025
f70b359
Revert "Fix ESP8266 DMA off-by-one"
willmmiles Dec 2, 2025
7b9d643
Update NeoPixelBus with DMA fix
willmmiles Dec 2, 2025
e306e14
Add Gledopto Series With Ethernet
Aogu181 Dec 2, 2025
5885a9c
Add Gledopto Series With Ethernet
Aogu181 Dec 2, 2025
b98b1b4
Add Gledopto Series With Ethernet
Aogu181 Dec 2, 2025
3bac2dd
Add Gledopto Series With Ethernet
Aogu181 Dec 2, 2025
e403f4e
Merge pull request #5147 from willmmiles/npb-894
netmindz Dec 2, 2025
bdea3d4
Merge pull request #5143 from wled/copilot/update-usermods-trigger-logic
netmindz Dec 2, 2025
c114ea6
AR bugfix
softhack007 Dec 2, 2025
de01c5e
Add Gledopto Series With Ethernet
Aogu181 Dec 3, 2025
8cbc765
adding dynamic update of LED type dropdown (#5014)
DedeHai Dec 3, 2025
e6b5429
Update CONTRIBUTING.md with AI usage guidelines
softhack007 Dec 3, 2025
41b51ed
text styling
softhack007 Dec 3, 2025
fe33709
some clarifications
softhack007 Dec 3, 2025
cc5b504
Add cherry-picking tip to CONTRIBUTING.md
softhack007 Dec 3, 2025
a2b64ad
Merge branch 'wled:main' into main
Aogu181 Dec 4, 2025
474c84c
Add Gledopto Series With Ethernet
Aogu181 Dec 4, 2025
a55a32c
Add Gledopto Series With Ethernet config
Aogu181 Dec 4, 2025
6f6ac06
replaced blur-rendering with ellipse rendering
DedeHai Dec 6, 2025
a421cfe
adding mass-ratio to collisions for different sized particles
DedeHai Dec 6, 2025
ead1d6b
Add Gledopto Series With Ethernet
Aogu181 Dec 7, 2025
14a7280
Add Gledopto Series With Ethernet
Aogu181 Dec 7, 2025
e074d19
Initial plan
Copilot Dec 8, 2025
2a53f41
Add hasPSRAM and psramSize fields to /info endpoint
Copilot Dec 8, 2025
4684e09
Update usage report to send hasPSRAM and psramSize fields
Copilot Dec 8, 2025
b4d3a27
Fix potential overflow in PSRAM size calculation
Copilot Dec 8, 2025
1fee9d4
Rename hasPSRAM to psramPresent
Copilot Dec 8, 2025
f2a3502
Add Gledopto Series With Ethernet
Aogu181 Dec 10, 2025
2ff4ee0
Merge pull request #5168 from wled/copilot/update-info-endpoint-p-sram
netmindz Dec 10, 2025
4b0cf87
Add Gledopto Series With Ethernet
Aogu181 Dec 11, 2025
6e39969
Initial plan
Copilot Dec 12, 2025
5c2177e
Add repo field from info data to upgradeData
Copilot Dec 12, 2025
fa3a94e
Merge pull request #5156 from Aogu181/main
netmindz Dec 13, 2025
19bc3c5
lots of tweaks, updated 1D rendering and collisions
DedeHai Dec 13, 2025
6a8c6c1
bugfix
DedeHai Dec 13, 2025
f9a8b30
Merge pull request #4903 from DedeHai/ESPNOW_AP-mode_fix
netmindz Dec 13, 2025
6388b8f
Merge pull request #5188 from DedeHai/PS_ellipseRendering
DedeHai Dec 13, 2025
6632a35
Remove unnecessary conditional for repo field
Copilot Dec 13, 2025
c35140e
"WLEDPixelForge": new image & scrolling text interface (#4982)
DedeHai Dec 13, 2025
d1260cc
clear enable bit on unused time macros (#5134)
DedeHai Dec 14, 2025
32b104e
Use sequential loading and requests for all UI resources (#5013)
DedeHai Dec 14, 2025
9094b31
Display gaps in peek, fix segment overflow bug (#5105)
DedeHai Dec 14, 2025
c097cb1
Merge pull request #5185 from wled/copilot/add-repo-field-to-upgradedata
netmindz Dec 14, 2025
bb6114e
PacMan effect (#4891)
BobLoeffler68 Dec 14, 2025
913c731
do not replace legacy FX with new PS FX
DedeHai Dec 14, 2025
b452370
Merge pull request #5096 from netmindz/no-dmx-ar-conflict
softhack007 Dec 15, 2025
7f4e0f7
nicer random distribution in PS emitter
DedeHai Dec 16, 2025
dd3edf1
improved 2D collisions, fixed duplicate line in fireworks 1D, remove …
DedeHai Dec 16, 2025
af7c910
revert gamma change: it was actually correct
DedeHai Dec 17, 2025
624763c
Bugfix in rotary encoder UM: off-by-1 in palette count
DedeHai Dec 17, 2025
65f1d8d
Fix TypeError when loading UI with custom palette selected (#5205)
Copilot Dec 18, 2025
71c8a30
Merge pull request #5057 from willmmiles/update-source-version-check
netmindz Dec 19, 2025
eca002b
Merge pull request #5193 from DedeHai/keep_legacyFX
netmindz Dec 19, 2025
dc76ff6
Fix for #5206
blazoncek Dec 19, 2025
c8a0381
remove EEPROM support (#5191)
DedeHai Dec 19, 2025
fdb85d8
2D fix for #5206
blazoncek Dec 19, 2025
304c59e
Revert "Add old version check to OTA update" (#5212)
willmmiles Dec 20, 2025
b821e20
use constant instead of magic number in pixelforge
DedeHai Dec 22, 2025
e4b0ee0
Update version description in bug.yml
Merikei Dec 24, 2025
8a2a705
Usermod Temperature: use full 12-bit precision (#4916)
nename0 Dec 26, 2025
f1f067e
bugfix in particle collision binning
DedeHai Dec 27, 2025
1c2cacf
adding link to WLED VidoLab
DedeHai Dec 27, 2025
fa86856
minor bugfixes as suggested by the rabbit
DedeHai Dec 29, 2025
46e77ea
revert change to extractModeName, add comment for clarification
DedeHai Dec 29, 2025
787d8a7
fix FX checkmark sync (#5239)
DedeHai Dec 29, 2025
600b9b4
Update funding sources in FUNDING.yml
netmindz Jan 1, 2026
979e3fd
Update GitHub sponsors list in FUNDING.yml
netmindz Jan 1, 2026
60b2c3b
Fixes ethernet initialisation of static IP settings. Also corrected s…
brettbear Jan 2, 2026
60e1698
Improvements & fixes for HUB75 (#5026)
DedeHai Jan 3, 2026
5cfb6f9
Palettes fix (#5263)
DedeHai Jan 3, 2026
b556da8
Bugfix: GPIO0 always gets assigned to a button (#5259)
Copilot Jan 3, 2026
e95450b
replace cos8 with cos8_t correcting an oversight
DedeHai Jan 3, 2026
407c9fd
Add support for Australian Western Time
nomis52 Jan 5, 2026
8e27fe4
bufgix: prevent file data loss due to replacing an open file pointer
softhack007 Jan 5, 2026
97493b1
Merge pull request #5229 from Merikei/fix-bug-issue_template
softhack007 Jan 5, 2026
a870474
Removed redundant check before closing the file handle
softhack007 Jan 5, 2026
4749247
Update funding links in FUNDING.yml
netmindz Jan 5, 2026
32daa03
Merge pull request #5276 from wled/fix_5275_part1
softhack007 Jan 5, 2026
8433fd2
Add softhack007 to GitHub funding list
softhack007 Jan 5, 2026
254e009
Random colors via JSON API in Segment object like "col":["r","r","r"]…
AlexeyMal Jan 7, 2026
22ab62d
Merge pull request #5273 from nomis52/awst
netmindz Jan 7, 2026
e2de1af
Merge pull request #5262 from brettbear/brettbear/ethernet-static-ip-…
netmindz Jan 10, 2026
fe3a158
Improvements to deepsleep UM (#4456)
elanworld Jan 10, 2026
6e9dc18
deepsleep cleanup, use toki to check for valid time
DedeHai Jan 10, 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
2c4ed42
New custom palettes editor (#5010)
DedeHai Jan 30, 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
536b40c
Fix start & end of segment not "flowing" in Flow FX (#5392)
DedeHai 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
464ff28
feat(eps-now): add 3 scenes for GLEDOPTO ESP-NOW WLED Remote Control
GLEDOPTO Feb 27, 2026
92fb0eb
feat(eps-now): add 3 scenes for GLEDOPTO ESP-NOW WLED Remote
GLEDOPTO Mar 2, 2026
fa13a7c
feat(eps-now): add 3 scenes for GLEDOPTO ESP-NOW WLED Remote
GLEDOPTO Mar 2, 2026
6e06516
feat(eps-now): add 3 scenes for GLEDOPTO ESP-NOW WLED Remote
GLEDOPTO Mar 3, 2026
8377b90
Add branding
netmindz Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 1 addition & 6 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@

# [Choice] Python version: 3, 3.9, 3.8, 3.7, 3.6
ARG VARIANT="3"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

# [Option] Install Node.js
ARG INSTALL_NODE="true"
ARG NODE_VERSION="lts/*"
RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
FROM mcr.microsoft.com/devcontainers/python:0-${VARIANT}

# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
# COPY requirements.txt /tmp/pip-tmp/
Expand Down
50 changes: 24 additions & 26 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
"context": "..",
"args": {
// Update 'VARIANT' to pick a Python version: 3, 3.6, 3.7, 3.8, 3.9
"VARIANT": "3",
// Options
"INSTALL_NODE": "true",
"NODE_VERSION": "lts/*"
"VARIANT": "3"
}
},

Expand All @@ -27,34 +24,35 @@
// risk to running the build directly on the host.
// "runArgs": ["--privileged", "-v", "/dev/bus/usb:/dev/bus/usb", "--group-add", "dialout"],

// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"python.pythonPath": "/usr/local/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
"python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint"
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"python.pythonPath": "/usr/local/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
"python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint"
},
"extensions": [
"ms-python.python",
"platformio.platformio-ide"
]
}
},

// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-python.python",
"platformio.platformio-ide"
],

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "npm install",
"postCreateCommand": "bash -i -c 'nvm install && npm ci'",

// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
Expand Down
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github: [Aircoookie,blazoncek]
github: [DedeHai,lost-hope,willmmiles,netmindz,softhack007]
custom: ['https://paypal.me/Aircoookie','https://paypal.me/blazoncek']
9 changes: 7 additions & 2 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ body:
id: version
attributes:
label: What version of WLED?
description: You can find this in by going to Config -> Security & Updates -> Scroll to Bottom. Copy and paste the entire line after "Server message"
description: |-
Find this by going to <kbd><samp>⚙️ Config</samp></kbd> → <kbd><samp>Security & Updates</samp></kbd> → Scroll to Bottom.
Copy and paste the rest of the line that begins “<samp>Installed version: </samp>”,
or, for older versions, the entire line after “<samp>Server message</samp>”.
placeholder: "e.g. WLED 0.13.1 (build 2203150)"
validations:
required: true
Expand All @@ -60,6 +63,8 @@ body:
- ESP32-S2
- ESP32-C3
- Other
- ESP32-C6 (experimental)
- ESP32-C5 (experimental)
validations:
required: true
- type: textarea
Expand All @@ -80,7 +85,7 @@ body:
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/Aircoookie/WLED/blob/master/CODE_OF_CONDUCT.md)
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/wled-dev/WLED/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
172 changes: 172 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# WLED - ESP32/ESP8266 LED Controller Firmware

WLED is a fast and feature-rich implementation of an ESP32 and ESP8266 webserver to control NeoPixel (WS2812B, WS2811, SK6812) LEDs and SPI-based chipsets. The project consists of C++ firmware for microcontrollers and a modern web interface.

Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.

## Working Effectively

### Initial Setup
- Install Node.js 20+ (specified in `.nvmrc`): Check your version with `node --version`
- Install dependencies: `npm ci` (takes ~5 seconds)
- Install PlatformIO for hardware builds: `pip install -r requirements.txt` (takes ~60 seconds)

### Build and Test Workflow
- **ALWAYS build web UI first**: `npm run build` -- takes 3 seconds. NEVER CANCEL.
- **Run tests**: `npm test` -- takes 40 seconds. NEVER CANCEL. Set timeout to 2+ minutes.
- **Development mode**: `npm run dev` -- monitors file changes and auto-rebuilds web UI
- **Hardware firmware build**: `pio run -e [environment]` -- takes 15+ minutes. NEVER CANCEL. Set timeout to 30+ minutes.

### Build Process Details
The build has two main phases:
1. **Web UI Generation** (`npm run build`):
- Processes files in `wled00/data/` (HTML, CSS, JS)
- Minifies and compresses web content
- Generates `wled00/html_*.h` files with embedded web content
- **CRITICAL**: Must be done before any hardware build

2. **Hardware Compilation** (`pio run`):
- Compiles C++ firmware for various ESP32/ESP8266 targets
- Common environments: `nodemcuv2`, `esp32dev`, `esp8266_2m`
- List all targets: `pio run --list-targets`

## Before Finishing Work

**CRITICAL: You MUST complete ALL of these steps before marking your work as complete:**

1. **Run the test suite**: `npm test` -- Set timeout to 2+ minutes. NEVER CANCEL.
- All tests MUST pass
- If tests fail, fix the issue before proceeding

2. **Build at least one hardware environment**: `pio run -e esp32dev` -- Set timeout to 30+ minutes. NEVER CANCEL.
- Choose `esp32dev` as it's a common, representative environment
- See "Hardware Compilation" section above for the full list of common environments
- The build MUST complete successfully without errors
- If the build fails, fix the issue before proceeding
- **DO NOT skip this step** - it validates that firmware compiles with your changes

3. **For web UI changes only**: Manually test the interface
- See "Manual Testing Scenarios" section below
- Verify the UI loads and functions correctly

**If any of these validation steps fail, you MUST fix the issues before finishing. Do NOT mark work as complete with failing builds or tests.**

## Validation and Testing

### Web UI Testing
- **ALWAYS validate web UI changes manually**:
- Start local server: `cd wled00/data && python3 -m http.server 8080`
- Open `http://localhost:8080/index.htm` in browser
- Test basic functionality: color picker, effects, settings pages
- **Check for JavaScript errors** in browser console

### 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
- **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)

### Manual Testing Scenarios
After making changes to web UI, always test:
- **Load main interface**: Verify index.htm loads without errors
- **Navigation**: Test switching between main page and settings pages
- **Color controls**: Verify color picker and brightness controls work
- **Effects**: Test effect selection and parameter changes
- **Settings**: Test form submission and validation

## Common Tasks

### Repository Structure
```
wled00/ # Main firmware source (C++)
├── data/ # Web interface files
│ ├── index.htm # Main UI
│ ├── settings*.htm # Settings pages
│ └── *.js/*.css # Frontend resources
├── *.cpp/*.h # Firmware source files
└── html_*.h # Generated embedded web files (DO NOT EDIT)
tools/ # Build tools (Node.js)
├── cdata.js # Web UI build script
└── cdata-test.js # Test suite
platformio.ini # Hardware build configuration
package.json # Node.js dependencies and scripts
.github/workflows/ # CI/CD pipelines
```

### Key Files and Their Purpose
- `wled00/data/index.htm` - Main web interface
- `wled00/data/settings*.htm` - Configuration pages
- `tools/cdata.js` - Converts web files to C++ headers
- `wled00/wled.h` - Main firmware configuration
- `platformio.ini` - Hardware build targets and settings

### Development Workflow
1. **For web UI changes**:
- Edit files in `wled00/data/`
- Run `npm run build` to regenerate headers
- Test with local HTTP server
- Run `npm test` to validate build system

2. **For firmware changes**:
- Edit files in `wled00/` (but NOT `html_*.h` files)
- Ensure web UI is built first (`npm run build`)
- Build firmware: `pio run -e [target]`
- Flash to device: `pio run -e [target] --target upload`

3. **For both web and firmware**:
- Always build web UI first
- Test web interface manually
- Build and test firmware if making firmware changes

## Build Timing and Timeouts

**IMPORTANT: Use these timeout values when running builds:**

- **Web UI build** (`npm run build`): 3 seconds typical - Set timeout to 30 seconds minimum
- **Test suite** (`npm test`): 40 seconds typical - Set timeout to 120 seconds (2 minutes) minimum
- **Hardware builds** (`pio run -e [target]`): 15-20 minutes typical for first build - Set timeout to 1800 seconds (30 minutes) minimum
- Subsequent builds are faster due to caching
- First builds download toolchains and dependencies which takes significant time
- **NEVER CANCEL long-running builds** - PlatformIO downloads and compilation require patience

**When validating your changes before finishing, you MUST wait for the hardware build to complete successfully. Set the timeout appropriately and be patient.**

## Troubleshooting

### Common Issues
- **Build fails with missing html_*.h**: Run `npm run build` first
- **Web UI looks broken**: Check browser console for JavaScript errors
- **PlatformIO network errors**: Try again, downloads can be flaky
- **Node.js version issues**: Ensure Node.js 20+ is installed (check `.nvmrc`)

### When Things Go Wrong
- **Clear generated files**: `rm -f wled00/html_*.h` then rebuild
- **Force web UI rebuild**: `npm run build -- --force` or `npm run build -- -f`
- **Clean PlatformIO cache**: `pio run --target clean`
- **Reinstall dependencies**: `rm -rf node_modules && npm install`

## 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**
- **Test web interface manually after any web UI changes**
- **Use VS Code with PlatformIO extension for best development experience**
- **Hardware builds require appropriate ESP32/ESP8266 development board**

## CI/CD Pipeline

**The GitHub Actions CI workflow will:**
1. Installs Node.js and Python dependencies
2. Runs `npm test` to validate build system (MUST pass)
3. Builds web UI with `npm run build` (automatically run by PlatformIO)
4. Compiles firmware for ALL hardware targets listed in `default_envs` (MUST succeed for all)
5. Uploads build artifacts

**To ensure CI success, you MUST locally:**
- Run `npm test` and ensure it passes
- Run `pio run -e esp32dev` (or another common environment from "Hardware Compilation" section) and ensure it completes successfully
- If either fails locally, it WILL fail in CI

**Match this workflow in your local development to ensure CI success. Do not mark work complete until you have validated builds locally.**
11 changes: 8 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:


build:
name: Build Enviornments
name: Build Environments
runs-on: ubuntu-latest
needs: get_default_envs
strategy:
Expand All @@ -38,8 +38,12 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- run: npm ci
- run: |
npm ci
VERSION=`date +%y%m%d0`
sed -i -r -e "s/define VERSION .+/define VERSION $VERSION/" wled00/wled.h
- name: Cache PlatformIO
uses: actions/cache@v4
with:
Expand All @@ -56,6 +60,7 @@ jobs:
cache: 'pip'
- name: Install PlatformIO
run: pip install -r requirements.txt

- name: Build firmware
run: pio run -e ${{ matrix.environment }}
- uses: actions/upload-artifact@v4
Expand All @@ -74,7 +79,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version-file: '.nvmrc'
cache: 'npm'
- run: npm ci
- run: npm test
50 changes: 50 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@

name: Deploy Nightly
on:
# This can be used to automatically publish nightlies at UTC nighttime
schedule:
- cron: '0 2 * * *' # run at 2 AM UTC
# This can be used to allow manually triggering nightlies from the web interface
workflow_dispatch:

jobs:
wled_build:
uses: ./.github/workflows/build.yml
nightly:
name: Deploy nightly
runs-on: ubuntu-latest
needs: wled_build
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: Show Files
run: ls -la
- name: "✏️ Generate release changelog"
id: changelog
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
excludeLabels: 'stale,wontfix,duplicate,invalid,external,question,use-as-is,not_planned'
- name: Update Nightly Release
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: nightly
name: 'Nightly Release $$'
prerelease: true
body_path: CHANGELOG_NIGHTLY.md
files: |
*.bin
*.bin.gz
- name: Repository Dispatch
uses: peter-evans/repository-dispatch@v3
with:
repository: wled/WLED-WebInstaller
event-type: release-nightly
token: ${{ secrets.PAT_PUBLIC }}
Loading
Loading