LuxLibre › Changelog
Changelog
All notable changes to LuxLibre. Versions follow semantic versioning:
the firmware version is LX_FW_VERSION in firmware/core/lx_version.h. A release that does not
change the firmware keeps its version.
0.5.0 - 2026-10-24
Hardware
- Drawings of every EDCO body (hardware/tools/edco_drawings.py): A3 sheets
at 2:1 (DXF, PDF, PNG) for EDCO v0.1, EDCO-18, EDCO-14, Mini-16, Mini-14 and Prism, in the style of the
FlashKa v0.7 drawings. Each has a top view, a section, a bottom view, both end views and a feature table with
tolerances. 83 dimensions are registered against the parameters and 43 main sizes are measured on the solids,
with 0 differences (report).
- Animations of every EDCO design (hardware/tools/edco_anim.py): the light
turning and the light coming apart. The EDCO Prism also has its beam stepping through the colours.
- A true-scale lineup of all seven lights (hardware/tools/lineup.py) for the README
and the web site.
- EDCO Prism v0.1, reference design #4 (hardware/edco-prism/), a concept:
a sealed 18350 light of 83 mm (Keeppower UH1835P) whose beam is white or any colour. A white SST-20 and
red, green and blue LEDs under one 24 mm Carclo quad optic (about 1,250 lm in turbo with all four, simulated),
the colour LEDs on a buck-boost rail and three linear sinks, an RGB-lit button, waterproof USB-C, a finned
head, the EDCO Mini’s keyring tab and an M version with magnets. CadQuery model with checks, STEP files,
renders, and a comparison with the Skilhunt MiX-7 Gen 2.
- EDCO Mini v0.1, reference design #3 (hardware/edco-mini/), a concept:
a sealed keychain light of about 70 mm in two sizes, Mini-16 (one 16340, Ø20 × 73.5 mm) and Mini-14
(Ø17 × 69.4 mm, needs a made-to-order cell). An SST-20 behind a TIR optic (944-978 lm out of the front,
simulated), red and UV side lights, a waterproof USB-C socket in the side of the head, and a keyring tab
with an obround hole at the tail; the M versions (Mini-16M, Mini-14M) add two magnets in the end of the tab.
CadQuery model with checks, STEP files, renders, and a comparison with the best 60 mm keychain lights.
- EDCO v0.2 (hardware/edco-v02/), a concept in two sizes (18500 and
14500): an SST-40 at up to 5.7 A, USB-C on the side under a twist collar, a crenellated finned bezel.
Firmware (LuxLibre 0.5.0)
- Colour beam for boards with
LX_HAS_COLOR (red, green and blue LEDs next to the white ones): 5 clicks
from off (on boards without side lights), 2 clicks for the next colour, 4 clicks while on switch white and
colour at the same brightness, and the indicator shows the new colour for a second. Parameters COLOR_SET,
COL_R, COL_G, COL_B and TURBO_ALL (turbo also lights the colour LEDs); the colour used last is
stored. hal::set_color() in every port (ESP32-C3: an MCP4728 I2C DAC), a colour-LED model in the
simulator, the console command color N [NAME], a colour test board and tests. Adding the parameters resets
stored settings to their defaults once (the calibration is kept).
- Settings page (site/luxlibre/): changes the parameters of a light with the
LuxLibre firmware over USB-C (Web Serial) and picks the colours of a colour beam;
make docs also writes its
parameters.json.
- Side lights for boards with
LX_HAS_SIDE: 5 clicks from off, 2 clicks switch red and UV, parameters
SIDE_RED and SIDE_UV; hal::set_side() in every port (two LEDC channels on the ESP32-C3). Adding the
two parameters resets stored settings to their defaults once (the calibration is kept).
- Simulator: side-light power, the electronics’ current while awake (
LX_SIM_MCU_UA), the charge current
(LX_SIM_CHARGE_MA), and a wake-up on USB power.
- Board headers:
edco-prism, edco-mini-16, edco-mini-14, edco-v02-18, edco-v02-14.
- The CI job builds every ESP32-C3 board header with ESP-IDF, the EDCO v0.2 sizes and the Mini-14 included.
Documentation and web site
- docs/comparison.md: every LuxLibre design against 14 popular everyday-carry lights
(Olight, Fenix, Nitecore, Emisar, Skilhunt, Acebeam, Wurkkos, RovyVon). It covers light at 30 s and after
10 minutes, throw, runtime, size and price. The other lights’ figures were measured by independent reviewers
and every one has its source; the LuxLibre figures are simulated. The data is in
docs/data/flashlights.json and the charts come from
tools/comparison_charts.py.
- The README starts with a light chooser: the lineup, a card for every design with its animation and links,
the lights at a glance, the comparison, and a “where to go next” table.
- The start page of the web site has the same chooser: pick a light on the true-scale lineup to see its
details, and take it apart. It adds an interactive comparison chart (light, runtime or throw, with details on
each light), the drawings, and links to the settings page and the FlashKa pages.
- The design pages show their drawings and animations.
- A new README banner and social preview with all seven lights
(hardware/tools/make_banners.py).
- Easier to find your way on GitHub: a menu at the top of the README and a repository map; every page starts
with a path back (LuxLibre › Lights › EDCO Prism) and long pages list their sections; the design pages end
with links to the previous and next light. hardware/README.md shows every light as a
card. The
cad/ and assets/ folders have a README that shows every drawing, 3D model and picture
(hardware/tools/folder_readmes.py), and firmware/,
firmware/boards/, site/ and hardware/tools/ have one that explains what is in them.
0.4.0 - 2026-10-23
Hardware
- EDCO v0.1, reference design #2 (hardware/edco-v01/), a
concept. EDCO is a round, sealed everyday-carry light without a laser and without a radio:
- a Ø20 × 93.5 mm 6061 tube with a closed tail. The battery and the electronics slide in from
the front as one cartridge (LED holder, main board in a POM sled, the cell, a tail board). A
bezel ring screws onto the tube’s M18 × 0.75 thread, clamps the LED holder and is locked with
thread-locker. The holder does not turn while the ring is tightened, so the LED wires never
twist;
- five seals, with IPX8 as the target (not tested): an O-ring on the LED holder, the glued TIR
optic, a stainless button cap on a clamped silicone membrane, a waterproof vertical USB-C
socket whose own seal ring seals in the tail wall, and a glued PMMA light pipe for the charge
indicator;
- USB-C in the centre of the tail face is the only way in: charging, firmware updates and
settings. A lanyard hole runs through each tail corner. One stainless button sits in a
scalloped pocket near the head, and “EDCO” is laser-marked on a label flat;
- the FlashKa v0.7 light engine and cell: an SST-20 Gen 2 LED under the LEDiL LISA3-RS-PIN
optic, the TPS62095 4 A driver, DW01A cell protection, the TP4057 charger and one Vapcell
INR14500 F15. The ESP32-C3 module becomes the bare ESP32-C3FH4 chip with no antenna (the radio
is never started). The laser, the key board and the pogo pins are gone;
- simulated with the LuxLibre simulator (LED at 85 °C): 966 lm turbo and 162.5 m of throw.
Full turbo lasts 74 s with the timer off, and High (592 lm) lasts 237 s (FlashKa v0.7 in the
same simulator: 56 s and 184 s). It then settles at about 290 lm with the body at 47.4 °C and
runs about 141 min from turbo;
- CadQuery model with fit, wall and interference checks, STEP files of the three aluminium
parts and of the assembly, and renders in black and clear anodising. A rough cost is given,
about 710 USD for one light and 235 USD each for five. The open points before ordering are
listed: USB-C samples, the deep bore, the thread, standby current, the boards, and the EU
battery-removability rule (design rule BAT-2).
- FlashKa: unchanged (v0.7 current, v0.6 and v0.5 kept).
Firmware (LuxLibre 0.4.0)
- New board
firmware/boards/edco-v01: the FlashKa v0.7 power stage on an ESP32-C3FH4 with one
digital button on GPIO3, an RGB indicator and no laser. It uses the modes layout, a temperature
limit of 49 °C (the round body would otherwise pass the 48 °C of THM-1) and a thermal model of
the EDCO body for the simulator.
- ESP32-C3 port: boards without a laser (
LX_HAS_LASER 0) now build, because the laser pin is
only used on boards that have one. The CI job builds the EDCO board too.
Documentation
- The README, the hardware and documentation indexes, the flashlight types, the licensing table,
the porting guide and the start page list EDCO.
0.3.0 - 2026-10-23
Hardware
Firmware
- FlashKa firmware 0.7.0 for the FlashKa Keychain v0.7: one code base with a compile-time board
selection (Cargo feature
board-v07); LED ceiling 3.0 A enforced in one place; turbo 2,850 mA
(about 966 lm out of the front, estimate) for 60 s, High 1,530 mA (about 601 lm), moonlight
3 mA; new profiles; one Vapcell INR14500 F15: 1,400 mAh in the estimates, 130 mV/A load
correction, the F15’s voltage curve, charging at about 500 mA, low-voltage step-down
3.15 / 3.20 / 3.25 V, a 2.8 A cell-current limit kept as a documented LuxLibre BAT-1 deviation
(turbo only, at most 60 s, regulated); the battery percentage, the runtime and the reported LED
current follow the current the driver can deliver from a part-empty cell. On the v0.7 the
profile’s temperature limit is the set point of a regulator (50 °C, Endurance 47 °C; it holds
the light just below it and keeps turbo and High at full output until the temperature gets
there). Simulated with the thermal model of the octagonal body and the cell, 25 °C still air:
turbo 58 s at full output, High 210 s, then about 280 lm, about 137 min to the low-voltage
step-down; turbo from a half-full cell about 775 lm. Reproducible image
flashka-fw-v0.7.0-merged.bin (SHA-256 6554028f…). Firmware 0.6.0 for v0.6 boards unchanged
(rebuilds byte for byte).
- Firmware installer: one page with both images and a required board choice (“FlashKa v0.7 -
three keys in the middle” / “FlashKa v0.6 - stainless button”); it reads the firmware already
on the light and asks for confirmation when it belongs to the other board; files for the other
board are refused.
- Control app 0.7.0: recognises the board from the light; v0.7 profiles, 2,850 mA turbo limit and
estimated lumens out of the front on a v0.7; demo light “FlashKa v0.7” with the same
temperature regulator and the F15; the Custom editor explains the temperature limit per board;
charge pauses are shown as normal.
- LuxLibre: board header
flashka-keychain-v07 for the F15 and the octagonal body (CI builds); a
board header can give its cell’s own open-circuit curve for the charge estimate
(LX_BAT_OCV_MV) and, for the simulator, its curve and the driver’s headroom (LX_SIM_OCV_V,
LX_SIM_DROP_MOHM); simulator: LED flux table, optic factor and body model from the board
header (--preset board), CSV column lumens_front. Boards without the new options build as
before. The LuxLibre firmware version is now 0.3.0 (ver prints LuxLibre 0.3.0).
Documentation
- Top README, hardware index and project site: FlashKa Keychain v0.7 as the current design,
v0.6 as the previous one; banners and social preview made from the v0.7 renders (the script is
hardware/flashka-keychain-v07/tools/make_banners.py).
- FlashKa v0.6 README: a note that v0.7 supersedes it and that its firmware sources build both
versions. The v0.6 firmware, web and protocol documents describe firmware 0.7.0 as well
(firmware.md, section 9).
- Reading paths and flashlight types name v0.7 as the current FlashKa; the firmware overview lists
v0.7 among the ESP32-C3 boards with its own board header; SECURITY.md lists the 0.3.x line;
the build report form asks for v0.7 builds (key board, machining kits, cast keys).
- Design rules and review checklist: DFM-7 is worded “fabrication outputs made by a script”.
CI
- The
flashka workflow runs the host tests of both firmware variants, checks the v0.7 cost
workbook and, in its experimental image job, builds both firmware images and compares them with
dist/.
- The
firmware workflow builds the simulator of every board header; its ESP-IDF job also builds
the flashka-keychain-v07 board.
0.2.0 - 2026-10-21
Hardware
Firmware
- Board header
flashka-keychain-v06: the v0.5 pins, limits and defaults, with the buttons on a
resistor ladder. Only the main button is used; next and previous serve the FlashKa firmware’s
level steps and presenter mode, which LuxLibre does not have.
- ESP32-C3 port: resistor-ladder buttons (
LX_ESP_BTN_LADDER_ADC_GPIO, LX_ESP_BTN_WAKE_GPIO,
LX_ESP_BTN_MAIN_BELOW_MV). The ladder pin is read with ADC1 at 2.5 dB and its own
calibration, “pressed” means below the main-button threshold, a second pin on the same net wakes
the chip from light sleep, and the other buttons are ignored (a held one is checked from light
sleep instead of keeping the chip awake). Boards with one button are unchanged. Written against
ESP-IDF 5.3; not yet compiled with ESP-IDF or tested on hardware.
- CI: the ESP32-C3 job also builds the v0.6 board and is marked experimental (allowed to fail)
until it has been compiled once.
- CI: a new
flashka workflow runs the FlashKa firmware host tests, rebuilds the firmware image
and compares it with the published one (experimental), runs the web app and installer tests in
a browser and checks the cost workbook.
Documentation
- Hardware index: FlashKa Keychain v0.6 as the current design, v0.5 as the previous one.
- Porting guide and ESP32-C3 port README: resistor-ladder buttons (how a board declares them, the
threshold, the wake pin, bring-up checks).
- Reading paths, flashlight types, simulator and firmware pages name both FlashKa versions.
- Project site on GitHub Pages (
site/) with the FlashKa control app and firmware installer;
a new top README with renders and web app recordings; SECURITY.md; a “build report” issue form.
0.1.0 - 2026-10-15
First public version.
Firmware
- Portable core in C++17 (embedded subset): 150 geometric levels, ramp / modes / simple button
layouts with a table-driven user interface, turbo with timer, battery check, beacon, SOS and
strobe, lockout that survives reboots, factory reset, laser support with limits, momentary
turbo on boards without a laser.
- Thermal regulation: PI regulator on a predicted temperature in fixed point without truncation
dead zones; output hysteresis, a 5 s dwell before the output may move back, and an integral
dead band, so that noisy or coarse sensors never cause flicker; gain ranges limited to values
tested not to oscillate; a short off does not reset the cap; hard shutdown that a calibration
offset can only make earlier; sensor-fault fallback.
- Battery: low-voltage warning, step-down and latched cut-off with a floor per chemistry that no
setting can go below; cell current limit from the board’s LED model; Li-ion, LiFePO4 and NiMH
charge estimates; charging temperature window (ports may not even probe for USB outside it)
and USB level cap.
- Pocket protection: stuck button ignored while dark (also on USB, where the charge window keeps
running), light switched off and locked after
POCKET_S while on; optional auto-lock.
- 50 ArduPilot-style parameters with ranges; storage with CRC-protected parameter block, a
separate calibration block (in its own flash page) that survives factory resets and
parameter-list changes, and a wear-spreading state ring; text console with
wdtest watchdog
test and defaults [all].
- Ports: host simulator (tests), ATtiny1616 and CH32V003 (build and link, not yet tested on
hardware), ESP32-C3 (experimental).
- PC simulator
luxsim with keychain and 18650 models, sensor noise and resolution, and
make sim BOARD=<board> for real board headers; plotting script; 47 unit and behaviour tests.
- ATtiny1616 brown-out fuse target (
make tiny1616-fuses); ESP32-C3 brown-out detector and
watchdog panic reset enabled.
- Design rules (69 rules in 10 categories), choosing parts with a worked 1200 lm 18650 example,
flashlight types, testing procedures, firmware architecture, porting and simulator guides.
tools/lux_calc.py calculator (standby, runtime, cell current, throw, thermal, trace width,
divider, NTC) with tests.
- Templates: requirements, design log, decision matrix, BOM, design-review checklist, test report.
Hardware
- FlashKa Keychain v0.5 reference design (formerly “Aurora++”): KiCad, CAD, drawings, production
files, cost workbook, build guide, the v0.5 Rust firmware with Bluetooth web app. Designed and
checked by software; not yet built.