Skip to content

winder/Universal-G-Code-Sender

Repository files navigation

Universal G-Code Sender

Last commit Build Status Codebeat badge Crowdin Downloads Releases

Universal G-Code Sender is a Java based, cross platform G-Code sender, compatible with GRBL, TinyG, g2core and Smoothieware.

Webpage: https://universalgcodesender.com/
Discussion forum: https://github.com/winder/Universal-G-Code-Sender/discussions
Discord chat: https://discord.gg/h4HRmyYX
Translations: https://poeditor.com/join/project/2J2hB5I41Z

Technical details:

Downloads

Below you will find the latest release of UGS.
For older releases please visit the releases page.

UGS Platform
The next generation, feature packed variant based on the Netbeans Platform.
Unpack and start the program bin/ugsplatform

Latest release (v2.1.9) Nightly build
Windows 64-bit Windows 64-bit Windows 64-bit Windows 64-bit
Mac OSX Mac OSX Mac OSX Mac OSX
Mac OSX Mac OSX ARM64 Mac OSX ARM64 Mac OSX ARM64
Linux x64 Linux 64-bit Linux x64 Linux 64-bit
Linux ARM Linux ARM Linux ARM Linux ARM
Linux ARM Linux ARM64 Linux ARM Linux ARM64
Zip All platforms Zip All platforms

UGS Classic
A clean and lightweight variant of UGS (requires Java 17).
Unpack and start the program by double clicking the jar file. On some platforms you may need to run the included start script.

Latest release (v2.1.8) Nightly build
Zip All platforms Zip All platforms

Screenshots

UGS Platform

UGS Platform main window

UGS Platform

Customizable panel layout

Customizable panel layout

Menu actions with customizable keybindings

Actions

Menu with plugins

Plugins

One of many plugins

Dowel Maker

Basic gcode editor

Basic gcode editor

Vector graphics designer for generating GCode toolpaths

Designer

UGS Classic

UGS Classic main window

Classic main window

UGS Classic with visualizer

Classic visualizer

Development

Show details on how to compile the software

For development we use Maven and Java 17 for compiling.

Compiling and starting the application

UGS Classic:

mvn install
mvn exec:java -Dexec.mainClass="com.willwinder.universalgcodesender.MainWindow" -pl ugs-core

UGS Platform:

mvn install
mvn nbm:run-platform -pl ugs-platform/application

Execute all tests

mvn test

Building the self-executing JAR

mvn install
mvn package -pl ugs-classic

Build a UniversalGcodeSender.zip release file

mvn package -pl ugs-classic assembly:assembly

Develop via IntelliJ

If you are more used to IntelliJ, you can also build, run and debug it there.

  • Run mvn nbm:run-platform -pl ugs-platform/application once via terminal to build everything
  • Import the Source, File -> New -> Project from existing Sources
  • Setup a new "Run Configuration", Java Application, with following settings:
    • Main Class: org.netbeans.Main
    • VM Options:
-Dpolyglot.engine.WarnInterpreterOnly=false
-Dnetbeans.user=$ProjectFileDir$/ugs-platform/application/target/userdir
-Dnetbeans.home=$ProjectFileDir$/ugs-platform/application/target/ugsplatform/platform
-Dnetbeans.logger.console=true
-Dnetbeans.indexing.noFileRefresh=true
-Dnetbeans.moduleitem.dontverifyclassloader=true
-Dnetbeans.dirs=$ProjectFileDir$/ugs-platform/application/target/ugsplatform/ugsplatform:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/platform:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/ide:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/extra:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/java
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/java.lang.ref=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.security=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED
--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED
--add-opens=java.desktop/javax.swing=ALL-UNNAMED
--add-opens=java.desktop/java.awt=ALL-UNNAMED
--add-opens=java.desktop/java.awt.event=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.im=ALL-UNNAMED
--add-exports=java.desktop/sun.awt=ALL-UNNAMED
--add-exports=java.desktop/java.awt.peer=ALL-UNNAMED
--add-exports=java.desktop/com.sun.beans.editors=ALL-UNNAMED
--add-exports=java.desktop/sun.swing=ALL-UNNAMED
--add-exports=java.desktop/sun.awt.im=ALL-UNNAMED
--add-exports=java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED
  • Program arguments: --branding ugsplatform
  • Working dir: $ProjectFileDir$
  • Use classpath of module: ugs-platform-app
  • There is a runConfiguration in the repository, which should be available after importing the project