Industrial Automation
Official User Guide · v1.0
The browser-based CNC controller & CAD/CAM workbench
To close the gap between what a CNC machine can do and what an ordinary person can actually operate — and to put every job a 3-axis machine can do into one application you never have to leave.
Running a CNC machine has traditionally meant stitching together a pile of tools: one program to draw, another to generate toolpaths, a third to send G-code, a driver package to install, and a manual to decode before any of it moves. karmyogi collapses that whole chain into a single browser tab, and deliberately designs for the most layman operator — plain-language labels, safe defaults, a visible 3D preview of exactly what will happen, and a motion lock-out so nothing moves until you say so. Ease of use is not a trade against capability here: the same app carries carving, engraving, laser, PCB isolation routing, soldering, plotting, 3D printing, embroidery and more, so you stop hopping between applications and start finishing work.
23 work modes for 3-axis machines. Never leave the app to change task.
No drivers, no server, no account. A browser tab and a USB cable.
Plain language, safe defaults, motion lock-out, and a 3D preview before every cut.
GRBL · FluidNC · grblHAL · Marlin, over USB, Bluetooth or Wi-Fi.
karmyogi updates continuously, so a screenshot may differ slightly from your build. Where this guide describes something newer than the published app, it is marked in the text. A full no-warranty / no-liability notice appears on page 2 — please read it before you run the machine.
00 · Contents
Every Figure is a screenshot of karmyogi actually running — never a mock-up — captured at 2× so it stays sharp when you zoom or print. Numbered balloons sit on the exact control described, and a leader line ties each one to its entry in the key, the same convention as an engineering drawing. A few wide photographic bands open sections; those are labelled Illustration and are artistic, not a guide to the interface.
| Bold | A control you click, or a value you type — Stream, Zero. |
| mono | Literal machine text: G-code, a GRBL setting such as $110, or a console reply. |
| ①②③ | A balloon on a figure. The same number appears in the key beside or below it. |
| §04 | A cross-reference. Click it on screen to jump to that section. |
| Blue box | Useful to know — a tip, a shortcut, or an explanation. |
| Amber box | Read it. Something here can damage a tool, a workpiece or the machine. |
Chromium browser — Chrome, Edge, Brave or Opera. Web Serial is not
available in Firefox or Safari.
HTTPS or localhost — karmyogi.hjlabs.in is already served over HTTPS.
A USB cable to your controller. Bluetooth and Wi-Fi also work.
One tab per job — carving, PCB, laser, embroidery… Each turns a design into G-code.
The bed, your toolpath and the live tool position in 3D.
The combined G-code, section list, and the Stream / pause / stop controls.
Raw GRBL traffic, plus an MDI box for typing commands directly.
DRO, jog pad, homing, overrides, coolant, work-coordinate systems.
Drag any tab to re-arrange, float or stack it. The layout is remembered.
If you are new to CNC, these twelve terms cover almost everything in this guide.
| G-code | The plain-text list of instructions a machine runs. karmyogi writes it for you; you rarely need to read it. |
| Toolpath | The route the cutter takes. What you see drawn in the 3D view. |
| Work zero | The corner of your material that you call X0 Y0 Z0. Everything is cut relative to it. |
| Machine zero | A fixed reference the machine finds by homing. Not usually where you cut from. |
| Homing | The machine drives to its limit switches to learn exactly where it is. |
| Jog | Moving the machine by hand, from the on-screen pad, keyboard or gamepad. |
| Safe Z | A height the tool lifts to before travelling, so it clears clamps and the workpiece. |
| Feed rate | How fast the tool moves while cutting, in mm/min. Too fast breaks bits. |
| Stepover | How far sideways each pass moves. Smaller = smoother finish, longer job. |
| WCS | Work Coordinate System — six saved datums (W1–W6 / G54–G59) so you can keep several setups. |
| Alarm | The controller has stopped for safety (a limit hit, or a reset). Unlock, then home. |
| Override | Trimming feed or spindle speed live, mid-cut, without stopping the program. |
karmyogi is provided “as is”, without warranty of any kind, express or implied, including but not limited to merchantability, fitness for a particular purpose and non-infringement. The software is experimental and under active development: it may contain defects, may behave unexpectedly, and may cause a machine to move in ways you did not intend. You operate your machine entirely at your own risk. You alone are responsible for checking every generated program before you run it, for your setup, workholding, tooling and workspace safety, and for supervising the machine at all times — keep a hand on the E-stop. This guide is likewise provided “as is.” It describes intended behaviour at the time of writing; the app changes continuously, so a feature may look different, behave differently, or not work as described here. Nothing in this document is a guarantee, specification or warranty of any kind. To the maximum extent permitted by law, neither hjLabs.in, its proprietor, nor any contributor accepts any responsibility or liability whatsoever for damage to machines, tools, workpieces or property, for injury to persons, or for any loss of data, time, production or profit arising from use of — or inability to use — this software or this guide, whether caused by a software defect, incorrect output, an error or omission in this documentation, a discrepancy between this guide and the app, or operator action. If you do not accept these terms, do not use the software. Licensed under the MIT Licence; the licence text governs and prevails.
01 · Quick start
Six steps. No installation at any point.
Go to karmyogi.hjlabs.in in Chrome, Edge, Brave or Opera. Nothing to download. You can also install it as an app and work offline.
Press Connect in the top bar and pick your USB port. Choose the firmware (GRBL / FluidNC / grblHAL / Marlin) in the selector to its left.
In Controller, press Home if your machine has limit switches. Jog to the corner of your stock, then press Zero to make that point X0 Y0 Z0.
Pick a work-mode tab (§07). Load your file — DXF, STL, STEP, OBJ, SVG or Gerber — set the tool and depths, then press Generate.
The Visualizer draws the path over the bed. Use Frame to trace the outline with the tool up, and confirm the job fits your stock.
Arm motion, then press Stream in the Program panel. Pause, resume and feed-override are live while it runs.
| ☐ | Motion is armed — karmyogi blocks jog and run until you explicitly arm it, so an accidental keypress cannot move the machine. |
| ☐ | Work zero is where you think it is — read the WORK column of the DRO, not the MACHINE column. |
| ☐ | The right work-coordinate system is active — W1…W6 (G54–G59) in the Controller. |
| ☐ | Tool fitted matches the toolpath — the operation card names the bit it was calculated for. |
| ☐ | Safe-Z clears every clamp — every program retracts before travelling; make sure that height is above your hold-downs. |
| ☐ | Framed the job — trace the outline with the spindle off first. |
| ☐ | E-stop within reach. |
karmyogi works in millimetres and emits G21 G90 G94 G17 at the top of every program (metric, absolute, feed-per-minute, XY plane). Feeds are mm/min. Z is positive up: cutting depths are negative.
The shortest complete job in the app. If you can do this, the rest of the guide is just variations on it. Allow ten minutes.
| 1 | Clamp a flat offcut of softwood to the bed. Fit a V-bit or a small engraving bit. |
| 2 | Connect the machine, then Home it if it has limit switches. |
| 3 | Jog to the bottom-left corner of where the text should sit. Lower Z until the tip just touches the wood — use the 0.1 mm step for the last bit. |
| 4 | Press Zero. That corner is now X0 Y0 Z0. |
| 5 | Open the Writing tab. Type your name. Set height ≈ 12 mm and depth ≈ −0.4 mm. |
| 6 | Press Generate. The path appears in the Visualizer over the bed. |
| 7 | Press Frame — the machine traces the outline with the tool up. Confirm it lands on the wood. |
| 8 | Arm motion, start the spindle, then press Stream in the Program panel. |
| 9 | Watch the first plunge. If it is too deep or too shallow, press Hold, adjust, and re-run. |
If the letters look wrong: too shallow means Z zero was set slightly high — re-zero and add 0.1 mm. Ragged edges usually mean the feed is too fast for the wood; drop the feed override to 70 % mid-cut and see if it cleans up.
These five account for almost every failed first attempt. Fuller diagnosis in §10.
| What you see | Why | What to do |
|---|---|---|
| The Connect button does nothing, or the browser shows no port list | Web Serial is missing. Firefox and Safari do not have it. | Use Chrome, Edge, Brave or Opera. Connecting must also start from your click — it cannot happen automatically. |
| The port picker is empty | The board is not enumerating: cable, driver, or the port is held by another program. | Close any other sender or serial monitor, try a different USB cable, then re-plug. On Linux add yourself to dialout. |
| Connected, but nothing moves | Motion is locked out — this is deliberate, so a stray keypress cannot drive the machine. | Press Arm motion in the Controller. The badge turns green and reads Motion armed. |
| Every command is refused, and the state reads Alarm | The controller stopped for safety — a limit switch, or a reset while it did not know its position. | Unlock, then Home. Do not jog before homing: the machine does not yet know where it is. |
| An axis runs the wrong way, or hits a limit immediately | Direction-inversion or travel limits are wrong for your machine. | Fix it once in Motion settings — $3 direction, $130–$132 travel. See §08. |
02 · The workbench
The whole application is one screen of dockable panels. This is the default arrangement, with a machine connected and motion armed.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Figure 02.1 — Default workbench, 1600 × 1000 logical px. Screenshot taken against the built-in Mock device.
The key above names the parts of the screen. This names the panels, and where each one is documented — click a section to jump.
| Top bar | Connect, machine profile, language, theme, zoom, About. §03 |
| Work-mode tabs | Turn a design into G-code — one tab per kind of job. §07 |
| Bit & Material | The tool and the stock the active work mode calculates against. §07 |
| Visualizer | Bed, toolpath, live tool position, cut simulation. §05 |
| Program | The combined G-code, its sections, and streaming control. §06 |
| Console + MDI | Raw controller traffic, and a box to type commands. §06 |
| Controller | DRO, jog, homing, overrides, work offsets, coolant. §04 |
| Motion settings | Every GRBL $-parameter, explained. §08 |
03 · Top bar
Everything about the link to your controller lives in one strip across the top. The coloured dot is the machine state at a glance.
1
2
3
4
5
6
7
8
9
10
11
12
Figure 03.1 — Top bar, full width. A crop of Figure 02.1.
Web Serial. The standard, lowest-latency choice. Chromium only.
Web Bluetooth for BLE-equipped boards. Needs a Chromium flag on some systems.
For FluidNC/ESP32 boards on your network — scan and connect by address.
A GRBL simulator inside the browser. Ideal for learning and for testing programs.
The single most useful indicator in the app. Learn these six colours and you always know what the machine is doing without reading anything.
Not connected. Nothing can move. CAD/CAM still works.
Connected and ready. Safe to jog, home or start a job.
Run, Jog or Home. The machine is in motion right now.
Paused. Press Resume to continue from exactly where it stopped.
Stopped for safety. Unlock, clear the cause, then home.
Amber while the handshake runs. If it never turns green, check baud rate.
1
2
3
4
Figure 03.2 — Work-mode tab strip. A crop of Figure 02.1.
One browser tab · any 3-axis machine
04 · Controller
The panel you will live in. Position, jogging, homing, work offsets, coolant and tool changes — all in one column.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Figure 04.1 — Controller panel, machine connected and armed. A crop of Figure 02.1.
←→↑↓ move X/Y; PgUp/PgDn move Z. A tap steps once; holding a key runs continuously and stops the moment you release. Esc cancels. The panel only needs to be visible — not focused.
[ and ] trim feed by 10 %, \ returns to 100 %. These are GRBL real-time overrides: they take effect immediately, mid-move, without stopping the program.
05 · Visualizer
A real 3D view of the machine envelope, your toolpath and the live tool position. This is the cheapest way to catch a mistake.
1
2
3
4
5
6
7
8
9
10
Figure 05.1 — Visualizer with an empty program. A crop of Figure 02.1.
Drag to orbit, middle-drag or two-finger drag to pan, wheel or pinch to zoom.
Scrub the playback timeline to watch the tool follow the path, with the carved-stock preview updating.
Rapids and cutting moves are drawn differently, and each operation section gets its own colour.
See it before you cut it
06 · Program & Console
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
| Reply | Meaning & what to do |
|---|---|
| ok | Command accepted. Normal. |
| error:9 | G-code locked out — the machine is in Alarm. Press Unlock, or home it. |
| error:20 / 24 | Unsupported or conflicting command — usually a hand-typed line. |
| ALARM:1 | A hard limit was hit. Unlock, jog off the switch, re-home. |
| ALARM:2 | The move exceeded the soft-travel limit. Check work zero and job placement. |
| [MSG:…] | An informational message from FluidNC/grblHAL — read it, it is usually explicit. |
07 · Work modes
Every tab takes a design, asks for the few numbers that matter, and writes safe G-code into the shared Program panel. They all share the same rhythm: load → set tool & depths → Generate → check in 3D → run.

The general-purpose CAM tab. DXF/SVG for 2D profiles and pockets; STL/STEP/OBJ for 3D relief carving. Bit & material presets set feeds for you.

Single-stroke engraving and pen-plotting text. Built-in Hershey font, or load a custom handwriting font made from your own writing.

Gerber + Excellon → isolation routing, drilling and board cut-out, via a guided wizard. In active development — not yet documented.

Automatic selective soldering. Per-point travel and touch-down heights, feeder pulses and dwell times in an editable table.

Vector cut/engrave with power and pass control, plus raster from an image. Uses M3/M4 spindle-as-laser mode.

Slice an STL to layers with a live layer preview: temperatures, retraction, infill, perimeters and supports.

Construction-scale printing. Import a civil floor plan (SVG/DXF), set wall width and layer height, and it prints walls course by course with openings.

Component placement from a centroid file, with feeder positions, nozzle actions and optional camera-assisted alignment.

Wire diameter, coil pitch and turns become a two-axis feed/rotate program, with a 3D coil preview.

Stitch paths from vector art. XY only — the needle is driven by the machine itself, so no Z is emitted.

A live overhead view of the bed with calibration, so you can align work optically and record a job.
Screw Fitting · Bore/Drill/Hole · Glue Dispense · Signature · Welding · Spot Welding · Clothes Stitching · Tattoo/Henna · Visualizer · Program · Console · Controller. Full list overleaf.
07b · Reference
| Tab | Input | What it produces |
|---|---|---|
| Controller | — | Manual control: DRO, jog, homing, work offsets, coolant, teach points, tool change. |
| Console | Typed commands | Raw GRBL log + MDI. The place to diagnose anything. |
| Program | G-code / sections | Streaming with Check mode, start-from-line, progress and export. |
| Visualizer | Current program | 3D bed, toolpath, live tool, placement gizmo, simulation. |
| 2D/3D Carving | DXF · SVG · STL · STEP · OBJ | Engrave, profile (on/in/out), pocket, and 3D relief roughing + finishing. |
| Writing | Text · custom font JSON | Single-stroke engraving or pen-plotting, with pen-up/down Z handling. |
| Soldering | Point list · Gerber pads | Selective soldering: per-point free-Z, touch-Z, feeder pulse and dwell. |
| Screw Fitting | Hole list | Driver sequences with approach, torque dwell and retract per screw. |
| Bore / Drill / Hole | Hole list · DXF | Peck drilling, boring and circular interpolation with chip-clearing. |
| PCB | Gerber ZIP · Excellon | Isolation routing, drilling, board cut-out. One- and two-sided. In active development — behaviour may change; not documented in this edition. |
| Glue Dispense | Path / points | Bead paths with on/off lead-in and lead-out to stop stringing. |
| Pick & Place | Centroid CSV | Pick-from-feeder, place-at-XY-with-rotation sequences. |
| Signature | Drawn / imported stroke | Reproduces a signature as a pen path at any scale. |
| 3D Printing | STL | Sliced layers, temperatures, retraction, infill, supports; layer preview. |
| 3D Print House | Floor plan SVG/DXF | Construction-scale wall courses with door/window openings and pump control. |
| Laser Cutting | SVG · DXF · image | Vector cut/engrave with passes and power; raster engraving. |
| Welding | Seam path | Seam tracking with weave, travel speed and arc on/off timing. |
| Spot Welding | Point list | Electrode approach, squeeze/weld/hold timing per spot. |
| Embroidery | SVG · DXF | Stitch paths, XY only — the machine drives the needle. |
| Clothes Stitching | SVG · DXF | Seam paths, XY only, with optional presser-foot and trim signals. |
| Spring Coiling | Wire & coil spec | Feed + rotation program with a 3D coil preview. |
| Tattoo / Henna | Vector art | Fine-line paths with needle/nozzle depth and speed limits. |
| Camera | Webcam | Calibrated overhead view, bed mosaic, optical alignment, job recording. |
| I want to… | Use |
|---|---|
| Cut a shape out of wood or acrylic | 2D/3D Carving → profile |
| Hollow out a recess | 2D/3D Carving → pocket |
| Carve a 3D model or relief | 2D/3D Carving → 3D from STL/STEP |
| Engrave text or a logo | Writing (or Carving → engrave) |
| Draw with a pen instead of cutting | Writing, pen Z mode |
| Make a circuit board | PCB |
| Drill a row of holes | Bore / Drill / Hole |
| Cut or engrave with a laser | Laser Cutting |
| Solder a populated board | Soldering |
| Run a file someone else made | Program → Upload G-code |
| Just move the machine by hand | Controller |
| Find out why something failed | Console |
Every work-mode tab is the same three questions in different clothing: what shape? (your file), what tool? (diameter and type), and how deep and how fast? Learn it once in Carving and every other tab will already make sense.
You will realistically use three or four. Close the rest with their ✕ to de-clutter the strip — they are one click away in the layout menu when you need them, and closing changes nothing about what the app can do.
08 · Machine settings
The ⚙ button in the top bar opens the full $-settings editor. Each parameter is grouped, named in plain language, and shows its valid range and factory default — so you are never editing a bare number.
1
2
3
4
5
6
7
8
9
10
11
12
13
Figure 09.1 — Motion settings dialog, showing the Stepper & ports group.
$100–$102 steps/mm — calibration.
$110–$112 max rate.
$120–$122 acceleration.
$130–$132 max travel — soft limits and the bed drawn in 3D.
$21 hard limits, $22 homing enable, $23 direction mask, $27 pull-off. Get direction right before enabling hard limits.
Press Copy $$ and paste it somewhere safe. It is the only backup of a working machine configuration, and it takes two seconds.
09 · Controls
Active whenever the Controller panel is visible — it does not need focus. Keys are ignored while you are typing in a field or a dialog is open.
| Key | Action |
|---|---|
| ← → ↑ ↓ | Jog X / Y — tap to step, hold for continuous |
| PgUp PgDn | Jog Z up / down |
| Esc | Cancel jog immediately |
| 1 2 3 4 | Step size 0.1 / 1 / 10 / 100 mm |
| H | Home ($H) |
| U | Unlock ($X) |
| R | Soft reset |
| ! / ~ | Feed hold / resume |
| S | Spindle on / off |
| Z | Zero all work axes |
| [ ] \ | Feed override −10 % / +10 % / 100 % |
Plug in any USB/Bluetooth gamepad. Sticks jog proportionally — push further to go faster — and every button is re-bindable by pressing it.
Left stick jogs X/Y · Right stick jogs Z
LB / RB cycle the step size
Face buttons home, unlock, zero, spindle — all remappable
Rumble confirms connection and warns on an alarm
FluidNC's FluidDial pendant wires to the controller's spare UART. The Controller tab has a setup panel that writes the required uart section into config.yaml for you, and refuses pins that would collide with the USB console or SPI flash.
The same app, re-arranged: the dock becomes a single-column tab switcher, and touch targets grow. Nothing is removed — you can jog, stream and watch the 3D view from a phone at the machine. Install it from the browser menu to run it full-screen and offline.
Every one of these is remembered between sessions, per device.
Drag a tab by its title to split, stack or float it. Drop it on an edge to dock, or outside to float a window.
Close what you do not use with its ✕. Reopen any tab from the layout menu — nothing is lost.
The ± zoom in the top bar scales the whole app. Useful on a shop-floor screen you read from a distance.
One button restores the default arrangement if you dock yourself into a corner.
Dark suits a workshop; light suits a bright room or a projector. Both are fully supported.
Pick yours in the top bar. The whole interface — including safety wording — is translated.
The rail down the left of each work-mode panel saves a whole parameter set: bit, depths, feeds. Recall it in one click.
Install from the browser menu to get a full-screen window, an icon, and full offline use.
| 1 | Keep the E-stop reachable — software is never a substitute for cutting power. Know where it is before you press Stream. |
| 2 | Eye protection, always — even a small end mill throws chips; a snapping 1 mm bit throws them fast. |
| 3 | Clamp the work, twice — a part that lifts mid-cut is the most common way jobs and bits are destroyed. |
| 4 | Dry-run above the stock — raise work Z by a few mm and run the program in the air first. |
| 5 | Never reach in while it is armed — lock motion before you change a tool or clear chips. |
| 6 | Extract dust — MDF, carbon fibre and PCB glass dust are all harmful; PCB dust is conductive too. |
Before every job, in order: home → set work zero → generate → check in 3D → frame with the tool up → arm motion → stream. Skipping the frame step is what turns a small mistake into a broken bit.
10 · Troubleshooting
| Symptom | Likely cause and fix |
|---|---|
| No serial ports offered | Another program holds the board — close other senders and serial monitors. Otherwise a charge-only cable, or a missing CH340/CP210x driver. Also check you are on Chrome/Edge/Brave/Opera, over HTTPS. |
| Connects, then goes quiet | Wrong baud rate, or the board reset on connect. Re-select 115200 and reconnect; watch the Console for the welcome banner. |
| Jog does nothing | Motion is locked — arm it in the Controller. Or the machine is in Alarm: press Unlock, then home. |
| Everything returns error:9 | GRBL is locked after a reset or alarm. Press Unlock ($X), or home the machine. |
| ALARM:1 on a limit | A limit switch triggered. Unlock, jog off the switch, re-home. If it fires with nothing near it, check $5 limit-pin inversion and your wiring. |
| Moves are the wrong size | Steps/mm is wrong. Command a 100 mm move, measure the travel, and correct $100–$102 proportionally. |
| An axis runs backwards | Flip that axis' bit in the direction mask $3. |
| Job is offset from the stock | Work zero, or the active WCS. Read the WORK column, confirm W1–W6, and Frame the job before cutting. |
| Cuts too deep on one side | The stock or the bed is not level. Use auto-levelling (height-map probing) — essential for PCB isolation. |
| Stream stutters or stalls | USB power management, a long/unshielded cable, or a controller low on memory. Try another port and a shorter cable; watch the Console for [MSG:ERR…]. |
| Nothing appears in 3D | No program yet — Generate from a work-mode tab first. If a program exists, press Fit in the Visualizer toolbar. |
| Wrong language / layout | Language is in the top bar (53 available). Use the layout-reset button to restore the default docking. |
Copy the last ~20 lines. It almost always contains the actual cause, and it is the first thing anyone helping will ask for.
The About dialog (click the karmyogi wordmark) links straight to the issue tracker and shows your exact build version.
github.com/hemangjoshi37a/karmyogi — MIT licensed. Issues and pull requests welcome.
These are built into the G-code writer, so they hold for every work mode — you do not switch them on. They reduce risk; they do not remove it. Read the notice on page 2.
| A known starting state | Every file opens with G21 G90 G94 G17 — millimetres, absolute, feed-per-minute, XY plane. Nothing is inherited from the last job you ran. |
| Safe-Z before travel | The tool retracts to the safe height before any XY move, so it cannot drag across the work or into a clamp. |
| A clean finish | Programs end retracted, with the spindle or laser off — not parked in the material. |
| Correct Z semantics | Z means different things to a spindle, a pen and a solder feeder. The mode is explicit, so pen work cannot be emitted with cutting depths. |
| No ambiguous numbers | No -0.000, and modal axis and feed words, so what the controller reads is what you asked for. |
| Conservative defaults | Feeds and depths start cautious. You raise them deliberately once a test cut looks right. |