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.
What runs on the Pi
Section titled “What runs on the Pi”| Service | What it does |
|---|---|
| klipper | The motion and heating firmware. A Ginger fork of Klipper |
| moonraker | The API between Klipper and everything else. Listens on port 7125 |
| mainsail | The web interface you open in a browser |
| KlipperScreen | The interface on the printer’s own display. Also a Ginger fork |
| crowsnest | Serves the camera stream |
| sonar | Keeps the Wi-Fi connection from going idle |
| g1-flask | Ginger’s own configurator. Listens on port 5000 — see below |
Alongside those, the image installs timelapse, KAMP (adaptive purge and mesh), Kiauh and Obico support.
The configurator on port 5000
Section titled “The configurator on port 5000”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.
Where the configuration lives
Section titled “Where the configuration lives”Everything Klipper reads is under printer_data/config:
| File | What it holds |
|---|---|
| printer.cfg | This machine’s hardware: steppers, heaters, probe, limits. Specific to your printer |
| moonraker.conf | API settings and the Update Manager entries |
| kamp.cfg | Adaptive 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_PRINTandEND_PRINTsequences - 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 macros the interface calls
Section titled “The macros the interface calls”The buttons in Mainsail’s Macros panel are ordinary G-code macros:
| Macro | What it does |
|---|---|
| BED_LEVEL | Probes the bed and builds the mesh. Results appear under Heightmap |
| SCREW_ADJUSTMENT | Walks you through levelling by hand, screw by screw |
| CHANGE_MATERIAL | A guided six-step material change |
| CHANGE_NOZZLE | A guided nozzle change — refuses to start while a print is running |
| EXTRUDER_ROTATION_DISTANCE | Sets Rotation Volume for the screw (E0) |
| MIXING_STEPPER_ROTATION_DISTANCE | The same for the hopper auger (E1) |
| SET_PRESSURE_ADVANCE_AND_SMOOTH_TIME | Sets 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.
What the pellet fork actually changes
Section titled “What the pellet fork actually changes”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_timeat 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.
Related notes
Section titled “Related notes”- Klipper firmware update — the two different updates
- G1OS installation — flashing a fresh card
- Raspberry Pi and SD card
- Mainsail dashboard basics
- Klipper MCU extruder_board