Bench (image 20260817124714): motion.button-hold-resume FAILED on a machine that did exactly the right thing. The operator paused about 7 s into an 8 s move, so the resume had a fraction of a second of travel left; the job was already Idle by the next poll and the test - which insisted on catching the Run state - called it "the second press did not resume the job". Its own evidence contradicted the verdict: the kernel counters read 2133 = 40.000 mm, the whole move, and the position check two lines below would have passed. Catching the state a command moves INTO is a race whenever the remaining work is short. What proves the press was acted on is the job LEAVING the hold, so that is what the test waits for now (wait_left_state), with the state it left into required to be Run or Idle - not Alarm or Door - and the existing "landed on its target" check still doing the real work. laser.pause-resume-lid-cancel had the same shape and gets the same treatment. Second defect, visible in the same record as "message seen: False": the driver DOES report "button pressed - job paused", but Grbl.status_report() began by discarding the read buffer and then kept only what followed the report, so every asynchronous [MSG:] line that landed during a poll was thrown away. It now consumes status reports only - stale ones included, which is what that discard was for - and leaves everything else for drain(). Tests that assert on what the controller said open their window with an explicit drain() before the prompt, so the text they judge is the text from the action.
OpenGlow/ForgeFIRM Firmware for Glowforge
Open-source firmware for Glowforge brand CNC lasers. ForgeFIRM replaces the cloud-dependent factory software on the stock control board — no hardware modification — and gives the machine a local controller, a local web control panel, and a standard Grbl interface.
- Latest Release
- Installation Instructions
- Build Instructions
- Connecting LightBurn
- How the laser safing works
- How a release is accepted
- Community Support
What it does
Two controller modes, selected in the web panel and switchable while the machine is idle:
- GRBL mode — grblHAL runs on the machine and speaks Grbl 1.1 over TCP port 23, so LightBurn, UGS, and cncjs drive the laser directly. Motion runs on the board's own hardware step engine (SDMA + EPIT), fed live by the planner. M3/M4 dynamic laser power, coolant-flow verification, over-temp holds, and an operator button press to arm the laser for each job.
- Cloud mode — the machine presents itself as a stock Glowforge to the Glowforge web service, so the phone and web apps work as they always did. Optional, and off by default. GRBL mode jogs and cuts without it; the one GRBL-mode function that still reaches the Glowforge service is camera-referenced homing (below), until limit-switch homing lands.
Around both modes:
- A web control panel on port 8080: machine status and position, coolant and fan telemetry, safety-switch states, camera view, machine settings, hardware diagnostics, firmware updates, and boot-slot management.
- Unified logging: every ForgeFIRM component logs through syslog into its
own directory under
/data/log/forgefirm, with per-logger levels for the device and for an optional remote syslog server, a live viewer in the panel, and a one-click log bundle — sanitized of identifying details — for attaching to an issue report. - Both cameras as MJPEG streams and full-resolution snapshots — the lid camera feeds LightBurn's camera overlay directly.
- Camera-referenced homing:
$Hfrom any sender runs the factory-style camera homing cycle through the Glowforge service (a Glowforge account and a live service session are required for$H; everything else in GRBL mode runs without them), and the machine records where it is. - Installs alongside the factory firmware in the unused A/B rootfs slot, archiving every factory version first, so the machine can be switched back to stock at any time without the Glowforge cloud.
Hardware
The control board is common to Glowforge Basic, Plus, and Pro. The 5 MP (OV5648) camera modules are fully supported; the 8 MP (OV8856) modules found in "HD" units bind but do not capture yet — see the camera note in kas/README.md.
Roadmap
- Limit-switch homing as an alternative to camera-referenced homing.
- Camera lens calibration and bed alignment for the LightBurn overlay.
- Capture support for the 8 MP (OV8856) camera modules.
- Cloud mode: stream jobs into the motion ring during the run, lifting the job-length cap that buffering the whole job imposes.
Safety
This machine contains a Class 4 CO₂ laser: it burns, blinds, and starts fires. Never defeat the lid switches or interlock, always vent the exhaust outdoors, and never cut PVC or other chlorinated plastics. Never leave a running job unattended — keep a fire extinguisher within reach. Read Before you cut — safety before your first job, and the Regulatory and legal section before installing. How the laser safing works describes the hardware safety chain and the software gates ForgeFIRM stacks on it.
A very important warning: this is experimental software. Use of this software could seriously maim or kill you or others, and voids your warranty. It is not affiliated with or endorsed by Glowforge. Use it at your own risk.