top of page

One sender to rule them all?

A brief tour of ioSender XL

A Grbl based CNC system uses a computer program, known as a GCode Sender, to send GCode to the motion controller. There are quite a few different ones out there with a wide range of sophistication, features and quality. One that I use is ioSender, available for free on GitHub. It was written by Terje Io, who continues to be very active - both supporting the current version and adding new features. This is a tour of the features of the XL version which keeps the Jog Panel open at all times though most of the features are the same on the non-XL version. ioSender only runs on Windows.

ioSenderXL Main Screen

Install and Set Up

There is no installer for ioSender - you download the zip file, and copy the "ioSender XL" directory to where ever you want. The current version when this was written is 2.0.37 but look for the latest. Note that if you place it in a system directory (like Program Files) you will need to run the program as an administrator to be able to make changes to the ioSender's configuration. For general usage, I recommend you place it in your Documents folder. At this point, you should have a Grbl based motion controller board connected to your PC. The first time you run ioSender, it will ask to create a configuration file, click on Yes. [Note, some of the screen shots in this blog are from earlier versions but they are consistent with Version 2.0.37.]

Start up dialog

It will then look for a serial port to a Grbl board. If it finds a Serial port, it will present you the option of connecting. You may also specify a different port including a Network port. Most board will not require an On connect action.

Sender Connection

You will next be presented with the main screen. Note that ioSender determines how many axes your Grbl system is set up for and displays them. For a 3 Axis machine, ioSender will not show A and B. The diagram below shows the major sections of ioSender XL

Main groups


Jogging is controlled by the Jogging section and the results show in the DRO (Digital Read Out) section. If you click on one of the + or - jog buttons, you should see a corresponding change in the DRO section for the Axis you selected. You can set the speed of the jog movement as well as the distance it will jog. In addition, you can use the keyboard for jogging. Left and right arrows for X Axis jogging. Up and Down keys for Y Axis jogging. Page Up and Page Down for Z Axis jogging. If you are new to using a CNC machine, you might play with this a little bit to get comfortable with it - jogging is one of the most common operations. Find the right Distance and Feed rate for your machine. Note that this images below are for a 5 Axis machine. Yours may show fewer axes.

DRO and Jog groups

The DRO section is not only a read-out for the current position - it can also be used to define the current position. You can set each axis to 0 by clicking on the 0 next to it. Zero all sets all the axis values to 0. In addition, you can set the exact location for each axis by entering a value. If you changed the X value to, say, 10, the machine will now think that is the location of the X Axis. No physical movement will occur.

Distance and Feed rate for jogging can be configured in the Settings: App panel, selected in the Main Tabs section. The UI Jogging section allows you to change all the settings. Click on the Save button, then exit and restart ioSender to ensure the settings are updated.

App Settings

System status and homing


The system status group is in the lower left corner, including the homing button. This tells us the status of the various control signals and limit switches/sensors. You can mouse over each of the single letters in the signals group to learn what signal it is associated with. The associated "LED" (red square) indicates if the corresponding input is on or off. This depends on whether the pins have been configured to match the inputs. A normally open (NO) switch/sensor requires the pin to be inverted and a normally closed (NC) switch/sensor needs the pin to not be inverted. See the Grbl settings section. Limit switches are controlled by Grbl setting $5, Control inputs by $14 and Probing by $6.

The State box tells us the current system state. The image to the right shows the state as idle but it can also be running, homing, error or alarm. You should make it a point to note the current state, particularly when the machine is not behaving as you think it should. Note any alarm and error codes. To clear an error or alarm, press the Reset button. To resume operations, you may need to also press the Unlock button.

To start a homing cycle, press the Home button. The image to above shows it is grayed out because homing is not enabled. To enable Homing, you will need to turn on Homing in the Settings: Grbl section which will cause the Home button to be active. Note that you will need to have limit sensors/switch on your machine and properly configured in Grbl settings.

Running a Job

To start a job, you need to load a GCode program, set your axes (X, Y and Z at minimum) and verify that your job is properly centered on the workpiece. In addition, you can set the 3D view to follow job progress visually.

To load the GCode file, click on the CNC folder icon in the upper left corner of ioSender and navigate to and select the GCode file. Supported file extensions are: .cnc, .nc, .ncc, .ncg, .gcode and .tap. If your CAM app uses a different extension, you can select "all files". Once you load the GCode file, the main display area will show the first 20 to 40 (or so) lines of GCode. Also, the Program limits section will be populated with the minimum and maximum values for all the axes. This is helpful as a sanity check for your GCode. You can click on the 3D View tab of the main display area (bottom left of the app, not top left). This will show a top down view of the tool paths, again another sanity check point. You can use the right mouse button to drag the viewport to a different angle to get a better sense of the tool paths, rapid paths and retracts. There are number of 3D View options available, you are encouraged to play with them.

Outline Panel

Before running your job, it is a good idea verify that it will actually fit on your workpiece. You do this by positioning Z above any possible obstructions and using the Outline feature. This may not be visible on the main screen - if so, you need to click on the vertical Outline tab on the right side of the app. Set a Feed rate that you feel comfortable with (it will be persistent) and then press Go. The machine will trace the X/Y "bounding box" of the job and you can verify that it will not exceed the limits of your workpiece or hit anything.

Once you are sure that there are no problems, you can run the job by pressing Cycle Start. The extreme lower left corner of the app will show you the current executing block and the total number of blocks in the job. A block is roughly equivalent to a line of GCode. The elapsed time is shown in the lower right of the app.

If you wish to stop a job before it completes, press Stop. This will stop the spindle and motion. When running with an 8-bit Grbl (Arduino), you may need to first press the Feed Hold button. This will stop motion but not turn off the spindle. You may now press the Stop button which will terminate the job including turning off the spindle. If, instead of Stop, you press Cycle Start, the GCode program will resume execution.

While you are running a job, you have several viewing options for the main display area:

  • Program - display the GCode being sent to the Grbl motion controller along with status.

  • 3D View - Shows a 3D view of the toolpaths, tool location, grid and other information. There are number of display options. Mouse over the options for more information.

  • Console - Displays the various responses from the Grbl motion controller. Useful to see responses from MDI input.

3D View with GCode Program loaded

Manual control of feed rate and spindle speed

Spindle and Feed overrides

You can override the feed rate and spindle speed of your job. Using the up/down buttons in the Feed rate and Spindle groups, you can set anywhere from 10 to 200% of the GCode specified feed rate and or Speed (set via the Fxxxx or Sxxxx commansd in the GCode program). Note that you may not be able to go lower than 10%. You can control the RPM of your spindle only if Grbl is set up so it is controllable via GCode. Even when a job is not running, you can turn the spindle on or off by entering a specific RPM value and selecting CW (clockwise) or CCW (counter clockwise, anticlockwise).


Probing is about correctly locating your workpiece's X, Y and/or Z zero position. ioSender has a very rich set of of probing features:

  • Z height finding

  • Tool Length offset

  • External or internal edge or corner finding

  • External or internal center finding

  • Workpiece rotation finding

  • Height map probing

We will not go into great depth on all the features. You will be presented with this screen when you open the Probing panel.

The first thing you will need to do is make sure that your probe pin is correctly configured. If you have a contact probe, one that makes a connection when it touches (normally open, NO), invert your probe pin (Probing Section, $6, see Grbl Settings section). If your probe breaks connection when it touches (normally closed, NC), do not invert your probe pin.

For simple Z height finding with a touch plate, you can can use the Edge Finder: external probing section. A very good tutorial video on this has been put together by Stefan Bauer. A touch plate is discussed at 4:50 in the video.

Stefan also has a very good video tutorial on center finding. He is adding more tutorials so keep an eye on his YouTube channel.

Height Map probing is a powerful tool for dealing with irregular surfaces. You can use a touch plate or 3D probe to create a height map and then use it to transform a loaded GCode Program so it views the irregular surface as flat. You could use it to, for example, map an etched name on a curved piece of wood or avoid having to surface flatten a workpiece. It is also useful for routing PCB material (that is notoriously uneven). A 3D probe works best for this but a touch plate will work - you will need to move the plate for each touch point. Click on the Height Map tab to get this:

If using a touch plate, set the Touch plate height, adjust any of your feed rates and distances. Then set the starting X and Y location of the workpiece (you can jog the machine to it, set zero and use 0,0 here) and then set width and height. Next, you can adjust the grid size - smaller is more accurate but takes longer. Also, select Pause before probing. Position the touch plate at 0,0 and press start. It will probe that location, retract, move the next location and wait for you to press Start again. Reposition the touch plate, press Start and it repeat the process. This will continue until all the grid points have been probed.

If you are using a 3D probe, set Touch plate to 0. 3D Probes are generally normally closed switches so make sure the Probe input pin is not inverted ($6, see Configuring Grbl Settings section). When you are ready, press Start and it will probe each grid location.

When your height map probing is done, you may save the height map for later use or click on Apply to transform the loaded GCode Program. Then you may run the job as you normally do.

If you wish to Height Map probe copper clad PCB material, you can use an end mill or other tool as a probe to make connection. Connect ground side of the probe input to the tool and the other input to the copper surface material. Do not check Pause before probing.

Configuring Grbl Settings

The Settings: Grbl panel is used to change your Grbl settings. You are presented with a list of settings, grouped by area. This is different from a lot of GCode Senders that list the settings by $ number. It also uses check boxes instead of those dreaded bit fields. In the image below, you can see that Homing cycle has been selected and check boxes for each of the homing options. Many of these are grblHAL extensions to the 8-bit Grbl options.

Grbl Settings

Configuring ioSender

The Settings: App panel is for configuring ioSender.

App Settings

I won't go into great detail here but there are some key settings worth considering. If you installed ioSender in a system folder, you will need to run ioSender in administrator mode to be able save any settings.

Agressive Buffering is worth turning on. This causes ioSender to send GCode blocks quickly to keep the input buffer of grbl as full as possible. This allows the PC to be disrupted without starving the motion controller. The advantage of this is that you don't need a very high performance PC to run a Grbl based CNC machine.

UI Jogging, as described above allows you to better match the size and performance of your machine.

Check Restore last window size on startup if you want ioSenderXL to start as a maximized window. Be sure to save the settings, quit and restart ioSenderXL to cause the newly selected options to take effect. Restart ioSender and then maximize the window. Now, once you quit, it will be set to start up maximized.


In ioSender, you can use macros to create a button to perform frequently used operations with a single click or keystroke. First, open the macro panel via the vertical Macro button at the upper right of the screen.

Then enter the macro name, in this case "Go To 0,0" and press Add. Then enter the action you want. In this case it is a line of GCode to do a rapid movement to X0 and Y0.

Press OK and a macro button will appear on the upper menu bar of ioSender.

Note that the Confirm before executing box has been checked - ioSender will ask if you are sure before executing the macro. It is good practice to start with that option set. You can always go back and uncheck it later. Now when you click on the macro (and confirm), it will move the X and Y axes to 0, 0. For keyboard use, a function key (F1) is assigned to the macro.

Macros can be edited, deleted and renamed via the macro panel.

Stefan Bauer has a video on this. You can see it here.

ioSender Wiki

For more information check out the ioSender Wkil on github.

A good section to review is Usage Tips.

About Me

I'm a CNC enthusiast. I run a small company, Brookwood Design, that makes a 32-bit Grbl breakout board for grblHAL and love to help people get the most out of their CNC machines.


Chris _L
Chris _L
May 16

Hello. Im currently running a. GrBLHal2k board and IOSender....and I am really enjoying the experience ....however ....just wondered if IOSender has any sort of "look ahead" feature or constant velocity setting so my CNC machine doesn't run so slowly between spline point junctions ? Or is that a short coming of Fusion369 g code ? Thanks 😊

Chris _L
Chris _L
May 16
Replying to

Thanks very much ..yes sorry for the cross pollination of terms....I will have a play with that setting to see if I can get the machine to run with more consistent speed thought the straight-line to curve transitions. Thanks again !


Hartley Sweeten
Hartley Sweeten
Feb 06

I downloaded the latest release and unzipped it. When I double click on the ioSender.exe (or try to create a shortcut to it) nothing happens. But, if I open a command prompt, change to the directory, and run 'ioSender.exe' it does run.

Why would the program only start from the command line?

Phil Barrett
Phil Barrett
Feb 06
Replying to

I've never had that problem. ioSender may take a long time to start the first time because of windows AV but that's probably not your issue.


Tristan Cousin
Tristan Cousin
Jan 14

Thanks ! It is working fine now. It was simple indeed , but I am just new in the Githhub world.


Tristan Cousin
Tristan Cousin
Jan 12

Hello ! I could not launch IoSender. I found no executable file in the IoSender XL folder. Any tip for that ?

Phil Barrett
Phil Barrett
Jan 12
Replying to

You don't want to download the Code, go to the Releases section and click on the latest release.

Then select the version of ioSender you want. I use ioSenderXL because it always has the jog controls on the screen. The non-XL version requires you to open the Jog tab.

Featured Posts
Recent Posts
Search By Tags
No tags yet.
Follow Us
  • Facebook Classic
  • Twitter Classic
  • Google Classic
bottom of page