| Firmware base & current version (Klipper fork / Marlin fork / proprietary) | "ELEGOO OS" = a closed C++ re-implementation of Klipper. The released source tree is unmistakably Klipper: src/ + lib/ with the full Klipper MCU HAL set (stm32, rp2040, atsam, avr, ar100, linux, simulator, lib/kconfiglib), and elegoo/ containing printer.cpp, configfile.cpp, chelper/, kinematics/, extras/ (215 files) — the Klippy host transpiled from Python to C++. Config syntax is Klipper's ([stepper_x], [tmc2209 …], [input_shaper], [bed_mesh], rotation_distance, pressure_advance). Slicer declares gcode_flavor: klipper. Community binary analysis pins the base at Klipper commit 28f60f7e, 616 commits past v0.9.1 — ⚠ this specific commit identification is a CC1 finding: freethecode.lol is a Centauri Carbon (CC1) campaign page and mentions the CC2 zero times (verified by full-text search, 2026-08-21). It is quoted here as the platform lineage, not as a CC2-specific binary analysis; nobody has published a commit-level diff of a CC2 binary. Latest OTA catalogued: v02.00.02.00 (2026-05-28); the published source corresponds to ~v01.01.13.10 / release 2602101855 | 3 sources |
|---|
| Source code availability (repos, GPL compliance status, last update date) | A GPL-3.0 source repo exists but is stale and incomplete, and compliance is actively disputed. elegooofficial/CentauriCarbon2 was created 2026-03-11, last pushed 2026-03-12, and has never been updated — while at least three OTA firmware releases have shipped since (v01.03.02.36, v01.03.02.51, v02.00.02.00). Open issue #8 "Out of compliance with GPLv3" (2026-06-02) is still open, with 8 comments escalating through 2026-08-14 — including an @-mention of @realrossmanngroup on 2026-08-13 and, on 2026-08-14, the first reply from an ELEGOO account (anjis-elegoo), which quotes the complaint back but does not commit to a source-release date. Re-verified 2026-08-21: still open, no new source push. Open issue #1 shows the release cannot even be built: mcu_build.sh -b toolhead_gd32 fails with can't found configfile: CentauriCarbon2/mcu_config/toolhead_gd32.config — the directory is missing from the repo. The same "Out of compliance with GPLv3" issue is open on the CC1 repo (#26). The freethecode.lol campaign is still live and still marked "Still ongoing" (issue raised 2025-08-07) | 7 sources- firmware/CentauriCarbon2/README.md; firmware/CentauriCarbon2/debugfile_printer_dsp.cfg (whole file); firmware/ElegooSlicer_ECC2/Elegoo_Centauri_Carbon_2_0.4_nozzle.json ( · 2026-08 · doc
- https://github.com/elegooofficial/CentauriCarbon2 (API: created 2026-03-11T10:10:07Z, pushed 2026-03-12T08:19:55Z, 3 commits, license GPL-3.0); https://github.com/elegooo · 2026-08 · doc
- https://github.com/elegooofficial/CentauriCarbon2 (API: created 2026-03-11T10:10:07Z, pushed 2026-03-12T08:19:55Z, 3 commits, license GPL-3.0); https://github.com/elegooo · 2026-08 · doc
- https://github.com/elegooofficial/CentauriCarbon2 (API: created 2026-03-11T10:10:07Z, pushed 2026-03-12T08:19:55Z, 3 commits, license GPL-3.0); https://github.com/elegooo · 2026-08 · doc
- firmware/CentauriCarbon2/README.md; firmware/CentauriCarbon2/debugfile_printer_dsp.cfg (whole file); firmware/ElegooSlicer_ECC2/Elegoo_Centauri_Carbon_2_0.4_nozzle.json ( · 2026-08 · doc
- https://github.com/elegooofficial/CentauriCarbon2 (API: created 2026-03-11T10:10:07Z, pushed 2026-03-12T08:19:55Z, 3 commits, license GPL-3.0); https://github.com/elegooo · 2026-08 · doc
- https://us.elegoo.com/collections/all/products.json; https://docs.opencentauri.cc/software/updates-cc2/; hackster.io ("closest competitors are the Bambu Lab P1S Combo and · 2026-08 · doc
|
|---|
| Root/SSH access: possible? official or community method | And this is the answer that changed in mid-2026. An SSH daemon was present in CC2 firmware up to and including v01.03.02.51 (2026-05-09). Firmware v02.00.02.00, released 2026-05-28, "removes the SSH process entirely" and simultaneously blocks downgrades to any earlier version. OpenCentauri publishes a repacked v01.03.02.51 specifically to defeat the downgrade block ("Use at your own risk"). No CC2 community firmware currently restores SSH: OpenCentauri Patched Firmware is explicitly "Not currently" compatible with the CC2 (it is built on CC1 1.1.40), and COSMOS's public FAQ still says CC2 support is a "Maybe". Hardware-level root remains available via Allwinner FEL mode + UART (documented for the CC2 specifically, eMMC on mmc dev 1) | 5 sources |
|---|
| Moonraker / Mainsail / Fluidd or other open API available (stock vs after mods)? | None of them, stock. The host is a single C++ binary with a proprietary IPC socket (-a /tmp/elegoo_uds) and an embedded Mongoose 7.12 web server. What *does* exist: a built-in WebUI, an MJPEG camera stream on port 3031 (:3031/video), an Elegoo SDCP protocol used by ElegooSlicer/the Matrix app, an MQTT transport (the non-shipping config even hard-codes broker_address=tcp://broker.emqx.io:1883), and OctoEverywhere / Home Assistant integrations built on the SDCP API. OpenCentauri has reverse-engineered and documented the API and MQTT surface | 4 sources |
|---|
| Notable community firmware/mods (names, repos, what they add) | For the CC2 specifically: none usable today. The ecosystem is real but CC1-first. (a) OpenCentauri Patched Firmware (repo OpenCentauri/cc-fw-tools) — adds SSH root, opkg/entware, boot logo, homing-position change, mid-print WebUI edits, USB-Ethernet support, M8212/M8213 chamber-light g-codes and TEMPERATURE_WAIT SENSOR=box; CC1 only. (b) COSMOS (OpenCentauri/cosmos, 231 stars) — full Klipper/Kalico on stock hardware via Yocto; "Add support for CC2" was merged 2026-07-01 (PR #225, author's own note: *"Untested, will still need some work probably"*), release 26.07.0 shipped 2026-07-29, yet the public FAQ still says CC2 is a "Maybe". (c) OpenCentauri/cad — full CC2 CAD models and FDM-optimised replacement parts. (d) Elegoo-Tag-Library — dumps of Elegoo RFID tags. (e) An OpenCentauri drop-in replacement mainboard project is in progress | 8 sources |
|---|
| Firmware update mechanism (OTA/USB) & update cadence history | OTA over Wi-Fi, or offline via USB. Packages are.zip.sig — a signed/encrypted wrapper containing *.swu.sig (the swupdate payload) and *.json.sig (metadata). The device uses an A/B partition scheme managed by swupdate: the update is written to the inactive slot which becomes primary on next boot. USB path: drop the.zip.sig on a FAT32 stick → Settings → Check for Updates → Offline Update. Cadence: 7 releases in ~7 months (2025-10-31, 2025-11-17, 2025-12-11, 2026-01-09, 2026-04-09, 2026-05-09, 2026-05-28) | 1 source |
|---|
| G-code flavor & notable custom G-codes/macros | Klipper flavour (gcode_flavor: klipper) plus a substantial proprietary extension set: G180 S<n> — a numbered macro dispatch table (S1–S10 calibration steps, S800 "move to waste box", S810–S813 flush/cutter steps, S900-series mesh profile logic); M6211 — CANVAS tool change with flush length, feedrates and temperatures; M2202 gcode_action_report=<code> — UI progress reporting; M2801 — exhaust-grille servo open/close; M190 S<t> A — bed heat with an extra A flag; SET_CONDITION J/A/B … SET_CONDITION_END — a conditional-execution primitive not present in mainline Klipper; plus standard BED_MESH_CALIBRATE, SAVE_CONFIG, SET_PRINT_STATS_INFO, PROBE, SET_KINEMATIC_POSITION, TEMPERATURE_WAIT. OpenCentauri maintains a custom-g-code reference | 1 source |
|---|
| Root shell: exact method (official setting toggle / vendor-documented / community exploit / none). Is root persistent across OTA firmware updates, or wiped each update? | Three tiers, none of them a supported toggle. (1) No official/vendor-documented root method exists — there is no developer-mode switch in the UI and no Elegoo documentation of shell access. (2) Firmware-resident SSH existed up to v01.03.02.51 (2026-05-09) and was deleted in v02.00.02.00 (2026-05-28); OpenCentauri describe the change as removing "the SSH process entirely, making it more difficult to perform research on a live device", and the same release blocks downgrades. Staying on ≤v01.03.02.51, or flashing OpenCentauri's repacked v01.03.02.51, is therefore the only firmware-level route — and I could not find published CC2 root credentials (the widely-quoted root / OpenCentauri pair belongs to OpenCentauri's CC1 patched firmware, which does not run on a CC2). (3) Hardware-level root is confirmed available: Allwinner FEL mode (short R53 while resetting, or efex from U-Boot) plus the on-board UART0/DSP serial headers, with CC2-specific artefacts published (u-boot-sunxi-with-spl-cc2.bin, backup_cc2.scr/restore_cc2.scr, eMMC on mmc dev 1) — this gives full eMMC read/write, i.e. offline root. Persistence: an OTA update replaces the entire rootfs slot (A/B swupdate), so any rootfs modification is wiped by the next official update. | 6 sources |
|---|
| Userland: OS base (Debian/Ubuntu/Buildroot/OpenWrt/busybox-only), package manager present (`apt`/`opkg`/`ipkg`/none), CPU architecture (armv7 / aarch64 / mips / x86), and free space on the writable partition. A busybox/no-apt rootfs with a few MB free is a red flag — say so. | OS base: a Buildroot/OpenWrt-style embedded Linux, not Debian/Ubuntu. Evidence: opkg is the package manager (Elegoo's own build docs: "开发板上opkg常用指令 … opkg install xxx.ipk", -o /opt/packages/), packaging is ipk with control.tar.gz/data.tar.gz and debian-binary = 2.0, init is /etc/init.d-style shell scripts, and app state lives under /opt (/opt/inst, /opt/usr/cfg, /opt/usr/gcode). Kernel: Linux 5.4.61 (Allwinner BSP). Architecture: 32-bit ARM (armv7-class), arch/arm, platform sun8iw20p1, SMP, VFP+NEON — *not* aarch64. RAM: 128 MB total, in-package. Storage: 8 GB eMMC. Free space on the writable partition: for the CC2 — the CC1-derived partition map gives rootfsA/B ≈ 134 MB each, rootfs_data ≈ 134 MB, UDISK ≈ 7.06 GB, but I did not find a CC2 partition dump | 3 sources |
|---|
| Native Tailscale feasibility: can `tailscaled` run persistently on-device? Cite concrete evidence — community guides, wiki entries, forum posts, or repos of people actually doing it on THIS model. Note whether it needs `/dev/net/tun` (kernel TUN support) and whether the kernel provides it, plus whether userspace-networking mode is the only option. Distinguish "someone did it" from "should theoretically work." | Not demonstrated by anyone, and structurally hostile. (a) No evidence any person has run tailscaled on a Centauri Carbon of either generation — I searched OpenCentauri's docs, its 4 relevant GitHub orgs/repos' issues, freethecode.lol, and the open web for "Tailscale + Centauri Carbon"; the only 3D-printer Tailscale guidance found is generic (Voron/Raspberry-Pi subnet-router patterns). (b) /dev/net/tun is very likely absent: CONFIG_TUN is not set in either Allwinner R528/T113 defconfig in OpenCentauri's fork of the vendor kernel (sun8iw20p1smp_defconfig, sun8iw20p1smp_t113_auto_defconfig); the only tunnel symbol present is CONFIG_IPV6_TUNNEL=y, and no CONFIG_NETFILTER* symbols are set at all. Without TUN, tailscaled must run --tun=userspace-networking, which rules out subnet-router and exit-node roles and costs throughput. (c) 128 MB RAM shared with the motion controller is a hard practical ceiling — tailscaled's resident set is a large fraction of that. (d) On current firmware there is no shell to install it from (N8), no apt, and an A/B rootfs that erases changes on update (N12) | 4 sources |
|---|
| SSH daemon: present by default or must be installed/enabled? Default credentials if documented. Does an OTA update disable it or reset the password? | Present by default up to v01.03.02.51; absent from v02.00.02.00 onward. OpenCentauri's wording is that v02.00.02.00 "removes the SSH process entirely", i.e. the daemon shipped enabled (or at least resident) in earlier builds. Default credentials for stock CC2 firmware: — I found none published. The frequently-cited root / OpenCentauri pair is explicitly the credential set for OpenCentauri's patched CC1 firmware, which does not support the CC2. An OTA update to v02.00.02.00 removes SSH and blocks rollback, so an OTA can and does permanently disable it | 3 sources |
|---|
| Filesystem persistence: is the rootfs read-only or overlay-mounted? Do user-installed binaries and init/systemd services survive reboot and survive firmware updates? Is there a supported place to persist customizations? | A/B rootfs managed by swupdate; user-installed software does not survive official updates. Each update is written to the *inactive* rootfs slot, which then becomes primary — so anything added to the live rootfs is left behind on the now-inactive slot. There is a separate rootfs_data partition (overlay/persistent data) and a large UDISK partition; Elegoo's own supported persistence locations are /opt/usr/cfg (user config, incl. autosave.cfg written by SAVE_CONFIG) and /opt/usr/gcode (job storage), with defaults in /opt/inst. run_printer.sh even contains a commented-out "copy default config to user config" path, showing Elegoo intended /opt/usr/cfg/user_printer_dsp.cfg as a user-override slot — but it is commented out in the shipped script, so the binary is launched against /opt/inst/printer_dsp.cfg and user config overrides are not active | 2 sources |
|---|