Java nesC Other

Universal GcodeSender is a Java based GRBL compatible cross platform G-Code sender. Use this program to run a GRBL controlled CNC machine.

Online documentation available here:
Documentation contributions can be made here:

To run simply unzip the .zip file and double click the .jar file. On some platforms you will need to run an included start script.

Note for MAC users: For version 1.0.8 and earlier you may need to create a "/var/lock" directory on OSX to fix a bug in the serial library. To do this open the Terminal application and run the following two commands:
sudo mkdir /var/lock
sudo chmod 777 /var/lock


2.0 Nightly builds build status: Build Status

  • Requires Java 8 or higher.
  • Currently under heavy development, feedback and suggestions are helpful!
  • classic GUI - The classic UGS GUI.
  • UGS Platform - This is a work in progress. The next generation platform-based GUI utilizing the UGS API.

Stable builds
1.0.7 - Requires Java 7 or higher.
1.0.6 - Requires Java 6 or higher.
Older releases can be found on the downloads page

Command table tab during a file send 3D Visualizer Window Finished sending a file Finished sending a file

Technical details:

  • JSSC for serial communication (RXTX was used up through v1.0.8)
  • JogAmp for OpenGL.
  • Developed with NetBeans 8.0.2 or later.


For development the Maven build tool is used.

Run main class from command line

mvn exec:java -Dexec.mainClass="com.willwinder.universalgcodesender.MainWindow"

Execute all tests

mvn test

Just build a self-running uber-jar:

mvn package

Build a release file

mvn package assembly:assembly


1.0.9 -> 2.0

  • Constant memory! Optimized every part of UGS to run in a fixed amount of memory, no more slowness because a file is too large.
  • 'Cancel' now issue a feed hold and soft reset to stop the machine faster.
  • Macro substitutions. Use {machine_x/y/z} {work_x/y/z} to substitute the current machine/work coordinates, {prompt|name} can be used to ask for values in a popup dialog.
  • UGS now queries GRBL for its current state and settings in order to configure itself in a more intelligent manner. (Thanks Phil!)
  • Improved gcode parser. Heavily refactored and validated with a new suite of unit tests, the gcode parser is now much more powerful than before and can be augmented customizable command processors.
  • Controllers can now be added and configured with a JSON file, see resources/firmware_config
  • Added restore default buttons on settings pages.
  • Plane selection support: G17, G18, G19

1.0.8 -> 1.0.9

  • Many performance improvements.
  • New serial library: JSSC
  • Updated 3D library.
  • Maven build script (Thanks nitram509!)
  • TinyG support enabled.
  • XLCD support.
  • Bug fixes: INCH/MM jog units, visualizer fixes (crashes and OSX support), "Null stream" error, localization crashes,
  • Translations: French, Greek, Dutch, Italian

1.0.7 -> 1.0.8

  • PendantUI server - connect to UGS with your smartphone or tablet. (jvabob)
  • Translations: German, Spanish, Italian, Afrikaans
  • Many bugfixes and stability improvements.

1.0.6 -> 1.0.7

  • Many improvements to code architecture to allow future support for multiple firmwares (TinyG, Marlin, Smoothie, etc).
  • New menu bar! Now new features can be added and existing features are more configurable.
  • Additional on-the-fly gcode command preprocessing:
    • truncate and round long decimals to configurable length.
    • enforce max command length.
    • remove whitespaces.
    • expand small arcs to G1 commands.
  • New option to save preprocessed gcode file to a file.
  • Visualizer navigation controls - pan and zoom with the mouse wheel. (michmerr)
  • Visualizer Support for radius arcs (phlatboyz sketchup plugin gcode now displays correctly)
  • New single-step mode.
  • New colored status indicator.
  • Many bugfixes, thanks to UGS contributors

1.0.5 -> 1.0.6

  • 3D gcode visualizer!
    • color coded line segments
    • real time tool position
    • real time gcode buffer position
  • Due to popular demand, RaspberryPi support.
  • Complete all-in-one release, 32 and 64 bit linux/windows/mac + RaspberryPi
  • Settings saved between runs (thanks lazyzero)
  • Advanced GRBL control, new buttons for GRBL 0.8c features (gcode check mode, homing, etc)
  • Major backend refactoring to make code more stable and testable.
  • Unit tests added, over 1300 lines of unit test code.

1.0.4 -> 1.0.5

  • Job duration estimate now displayed when running a file.
  • Real-time machine position display for GRBL v8.0c.
  • Display for most recent GcodeComment.
  • Bug fixes - no more dropped commands!
  • Overhauled the GUI to display more information.

1.0.3 -> 1.0.4

  • The step size spinner now goes to less than 1.
  • New buttons on the manual control page for common functions.
  • Manual X/Y coordinates can now be modified with arrow keys.
  • New start scripts added to release zip files.
  • Changed speed override to a percentage rather than absolute.
  • Bug fixes.

1.0.2 -> 1.0.3

  • Manual jogging mode, control machine with buttons in the UI.
  • Automatically skip blank lines and comments when sending a file.
  • Bug fixes.

1.0.1 -> 1.0.2

  • Grbl version checking.
  • Real-time pause/resume commands used for Grbl v0.8.
  • Comment filtering - parses out comments before sending commands.
  • Bug fixes.

1.0 -> 1.0.1

  • New distribution jar - Application no longer requires RXTX to be installed!
  • Added table view for file streaming.
  • Added Pause/Resume button.
  • Usability improvements.
  • Many bug fixes.
  • Renamed package to com.willwinder.universalgcodesender.