Skip to content

barebaric/rayforge

Repository files navigation

GitHub Release PyPI version Snap Release Launchpad PPA License: MIT

Rayforge

Rayforge is a modern, cross-platform G-code sender and control software for GRBL-based laser cutters and engravers. Built with Gtk4 and Libadwaita, it provides a clean, native interface for Linux and Windows, offering a full suite of tools for both hobbyists and professionals.

Screenshot

Key Features

Feature Description
Modern UI Polished and modern UI built with Gtk4 and Libadwaita. Supports system, light, and dark themes.
Multi-Layer Operations Assign different operations (e.g., engrave then cut) to layers in your design.
Versatile Operations Supports Contour, Raster Engraving (with cross-hatch fill), Shrink Wrap, and Depth Engraving.
Overscan & Kerf Comp. Improve engraving quality with overscan and ensure dimensional accuracy with kerf compensation.
2.5D Cutting Perform multi-pass cuts with a configurable step-down between each pass for thick materials.
3D G-code Preview Visualize G-code toolpaths in 3D to verify the job before sending it to the machine.
Multi-Machine Profiles Configure and instantly switch between multiple machine profiles.
GRBL Firmware Settings Read and write firmware parameters ($$) directly from the UI.
Comprehensive 2D Canvas Full suite of tools: alignment, transformation, measurement, zoom, pan, and more.
Advanced Path Generation High-quality image tracing, travel time optimization, path smoothing, and spot size interpolation.
Holding Tabs Add tabs to contour cuts to hold pieces in place. Supports manual and automatic placement.
G-code Macros & Hooks Run custom G-code snippets before/after jobs. Supports variable substitution.
Broad File Support Import from SVG, DXF, PDF, JPEG, PNG, BMP, and even Ruida files (.rd).
Multi-Laser Operations Choose different lasers for each operation in a job
Camera Integration Use a USB camera for workpiece alignment, positioning, and background tracing.
Cross-Platform Native builds for Linux and Windows.
Extensible Open development model makes it easy to add support for new devices.
Multi-Language Available in English, Portuguese, Spanish, and German.
G-code Dialects Supports GRBL, Smoothieware, and other GRBL-compatible firmwares.

Device Support

Device Type Connection Method Notes
GRBL Serial Port Supported since version 0.13. The most common connection type.
GRBL Network (WiFi/Ethernet) Connect to any GRBL device on your network.
Smoothieware Telnet Supported since version 0.15.

Installation

Windows

Download the latest installer from the Releases Page.

Linux

We offer several installation methods for Linux.

Ubuntu & Derivatives (via PPA)

For users on Ubuntu and its derivatives (like Linux Mint, Pop!_OS), the recommended method is our official PPA. This integrates directly with your system's package manager and provides automatic updates.

Note

The PPA supports Ubuntu 24.04 LTS and newer.

Open a terminal and run the following commands:

sudo add-apt-repository ppa:knipknap/rayforge
sudo apt update
sudo apt install rayforge

Cross-Distro (Snap)

The Snap package includes all dependencies and runs in a sandbox. It is the recommended method for most other Linux distributions.

Get it from the Snap Store

Important

The Snap is sandboxed and requires you to manually grant permissions for hardware access. Run these commands after installation.

For camera access:

sudo snap connect rayforge:camera

For USB serial port access:

# First, enable experimental hotplug support
sudo snap set system experimental.hotplug=true

# Connect your laser via USB, then run this command
sudo snap connect rayforge:serial-port

From Source (pip)

This method is for developers and advanced users. You must install system dependencies manually.

On Debian/Ubuntu-based systems:

sudo apt update
sudo apt install python3-pip python3-gi gir1.2-gtk-3.0 gir1.2-adw-1 gir1.2-gdkpixbuf-2.0 libgirepository-1.0-dev libgirepository-2.0-0 libvips42t64 libadwaita-1-0 libopencv-dev

pip3 install rayforge

(Package names may differ on other distributions.)

Other Operating Systems (e.g., macOS)

There are no official builds for other platforms, but Rayforge may run from source via the pip method. Contributions for packaging on other platforms are welcome.

Screenshots

Click to expand screenshots

Operation Settings Contour Settings

Machine & Device Configuration General Settings Device Settings Advanced Settings Laser Settings

Integrated Camera Support Camera Settings Camera Alignment Camera Image Camera Overlay on Worksurface

Contributing

We welcome contributions of all kinds! Whether you're fixing a bug, adding a feature, or improving documentation, your help is appreciated.

  • Report a Bug: Open an issue with a clear description and steps to reproduce.
  • Suggest a Feature: Start a discussion or open a feature request issue.
  • Submit a Pull Request: Please discuss major changes in an issue first.
  • Add a Driver: See the driver development guide to add support for your hardware.

Packaging Help Wanted

We are actively seeking help to create and maintain a Flatpak package. If you have experience with Flatpak, your contribution would be highly valuable!

Development

This project uses Pixi to manage dependencies and development environments for a reproducible setup.

Prerequisites

First, install Pixi by following the instructions on the official website.

1. Setup Environment

Clone the repository and install dependencies.

# Install Gtk/Adwaita system dependency (Debian/Ubuntu)
sudo apt install gir1.2-adw-1

# Let Pixi handle the rest
pixi install

This command reads pixi.toml and installs all conda and pip dependencies into a local .pixi virtual environment.

2. Run the Application

pixi run rayforge

3. Run Tests and Lint

pixi run test
pixi run lint

4. Activate the Development Shell

For an interactive workflow, you can activate a shell within the project's environment.

pixi shell

Inside this shell, you can run commands directly without the pixi run prefix (e.g., rayforge, pytest). Type exit to leave the shell.

5. Manage Dependencies

Always use Pixi to manage dependencies to ensure the pixi.lock file is updated.

# Add a conda package
pixi add numpy

# Add a PyPI package
pixi add --pypi requests

6. Translation Workflow

The following tasks are available for managing language translations:

Update .po files from source code

pixi run update-translations

Compile .po files to binary .mo files

pixi run compile-translations

License

This project is licensed under the MIT License. See the LICENSE file for details.