Skip to content
Main site

G1OS software stack

G1OS is the operating system on the Raspberry Pi inside the printer. It is a fork of MainsailOS, with a layer of Ginger-specific configuration installed on top.

Knowing what is in that stack matters when something breaks: most of it is standard software with a large community behind it, and only a small part is specific to the G1.

ServiceWhat it does
klipperThe motion and heating firmware. A Ginger fork of Klipper
moonrakerThe API between Klipper and everything else. Listens on port 7125
mainsailThe web interface you open in a browser
KlipperScreenThe interface on the printer’s own display. Also a Ginger fork
crowsnestServes the camera stream
sonarKeeps the Wi-Fi connection from going idle
g1-flaskGinger’s own configurator. Listens on port 5000 — see below

Alongside those, the image installs timelapse, KAMP (adaptive purge and mesh), Kiauh and Obico support.

This is the part that is entirely Ginger’s, and it is the reason the Mainsail menu has entries that do not exist on other Klipper machines.

It runs as the system service g1-flask, checks for updates once an hour, and adds its own entries to Mainsail’s navigation. UPDATE G1 is where configuration updates are applied.

by Ginger Additive is not a status. It sits at the bottom of the sidebar permanently, next to UPDATE G1 rather than instead of it, so seeing it tells you nothing about whether the machine is up to date.

Full explanation of what it updates, and how that differs from the Update Manager: Klipper firmware update.

Everything Klipper reads is under printer_data/config:

FileWhat it holds
printer.cfgThis machine’s hardware: steppers, heaters, probe, limits. Specific to your printer
moonraker.confAPI settings and the Update Manager entries
kamp.cfgAdaptive meshing and purging
G1-Configs/A link to the shared Ginger layer — see below

The G1-Configs/ entry is a symbolic link, not a folder. It points at the repository cloned into the Pi’s home directory, and it carries the parts that are the same on every G1:

  • main.cfg — the START_PRINT and END_PRINT sequences
  • macro.cfg — every Ginger macro
  • mainsail.cfg — interface-side definitions
  • KlipperScreen.conf — the display’s configuration

The printer’s serial number is stored separately, in printer_data/database/G1.Conf. That file is what ties the machine to its own configuration; it is written when you run INITIALIZE PRINTER after a fresh install.

The buttons in Mainsail’s Macros panel are ordinary G-code macros:

MacroWhat it does
BED_LEVELProbes the bed and builds the mesh. Results appear under Heightmap
SCREW_ADJUSTMENTWalks you through levelling by hand, screw by screw
CHANGE_MATERIALA guided six-step material change
CHANGE_NOZZLEA guided nozzle change — refuses to start while a print is running
EXTRUDER_ROTATION_DISTANCESets Rotation Volume for the screw (E0)
MIXING_STEPPER_ROTATION_DISTANCEThe same for the hopper auger (E1)
SET_PRESSURE_ADVANCE_AND_SMOOTH_TIMESets both Pressure Advance values at once

Macros whose names begin with _GINGER_ are internal steps — buzzer tones, probe up and down, purge parking, feeder enable and disable. They are called by the macros above and are not meant to be run by hand.

Klipper on the G1 is a fork, but the pellet-specific part of it is small and worth knowing exactly, because everything else behaves like standard Klipper:

  • Pressure Advance smoothing can go far higher. Stock Klipper caps pressure_advance_smooth_time at 0.2 s; the fork raises the ceiling to 5 s. Pellet extrusion needs it — the values the G1 uses would simply be rejected by an unmodified Klipper. The printer’s own display caps the same setting at 1 s
  • Bed screw adjustment is not tied to a standard thread. Stock Klipper asks which metric thread the levelling screws use (M3, M4, M5, M6) and derives the correction from a fixed table. The fork replaces that with a configurable factor and direction, because the G1’s screws are not one of those threads

Everything else — motion planning, heater control, the G-code interpreter — is upstream Klipper.