Skip to main content

Host-side Python library for the Marlin firmware serial protocol.

Project description

marlin-host

A host-side Python library for the Marlin firmware serial protocol — the PC/host end of the line-numbered, checksummed, ok-acknowledged G-code conversation that hosts like OctoPrint and Pronterface speak to a printer or CNC running Marlin. Neutral and standalone; not tied to any one application.

Status: MVP. Connect, M115 negotiation, reliable framed send, streaming, queries, and out-of-band e-stop are implemented and validated against real hardware (RAMPS 1.4 / Marlin bugfix-2.1.x, logic level — motion/thermal validation under power is ongoing). Developed against the Marlin firmware source and official docs. Licensed Apache-2.0.

Repository conventions

A few top-level directories are gitignored (local-only) and used while developing — they are intentionally not version-controlled:

  • working/ — scratch material we generate: protocol references, design notes, research write-ups. Local working files, not shipped.
  • _reference/ — external material pulled in to build against: Marlin firmware source, docs, and other technical references. Third-party, large, and in flux, so kept out of the repo.
  • planning/ — planning notes and task breakdowns.

Anything intended to ship — the library, its tests, and curated docs — lives in tracked directories, never in working/, _reference/, or planning/.

Develop

Requires uv and just.

just setup        # uv sync
just check        # ruff format-check + lint + pyright (CI-equivalent)
just test         # pytest

Usage

Parse a single response line:

from marlin_host import parse_response

resp = parse_response("ok N12 P15 B3")
resp.is_ack          # True
resp.fields          # {'N': 12.0, 'P': 15.0, 'B': 3.0}

parse_response("Resend: 13").resend_line     # 13
parse_response("echo:busy: processing").is_keepalive   # True

Drive a real controller (pip install 'marlin-host[serial]'):

from marlin_host import MarlinHost, SerialTransport

host = MarlinHost(SerialTransport("/dev/ttyUSB0", 250000), reliable=True)
host.connect()                       # resets the board, drains the startup banner
print(host.capabilities().firmware)

host.send("G28")                     # homes; returns when the controller acks `ok`
for progress in host.stream(open("part.gcode")):
    print(f"{progress.commands_sent}/{progress.total_commands}")

host.emergency_stop()                # M112, out-of-band

Develop and test against FakeTransport — no hardware required.

Console

An interactive console for hands-on bring-up:

marlin-host --port /dev/ttyUSB0 --reliable --log session.trace
# then type G-code, or :caps  :stream part.gcode  :estop  :quit

--log records every TX/RX line (via TracingTransport) — a captured session that can seed the conformance corpus.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

marlin_host-0.2.1.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

marlin_host-0.2.1-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

Details for the file marlin_host-0.2.1.tar.gz.

File metadata

  • Download URL: marlin_host-0.2.1.tar.gz
  • Upload date:
  • Size: 46.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for marlin_host-0.2.1.tar.gz
Algorithm Hash digest
SHA256 6361bfc2e644dfbf53fcad2681dcced6f24c3e5760515e58f01540043a842952
MD5 0960ac00b292285a7db35ad9355d77b9
BLAKE2b-256 76a9566312b72260f281c426ff36865b133f967519edfe5650117aef058598db

See more details on using hashes here.

Provenance

The following attestation bundles were made for marlin_host-0.2.1.tar.gz:

Publisher: release.yml on fiberpath/marlin-host

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file marlin_host-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: marlin_host-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 23.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for marlin_host-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f11c26843c7376a2c0ab02f730487656639088dd806b1f8d174ad022a0bc1b22
MD5 6a13e999505f42f4d4d6b49b958b51e8
BLAKE2b-256 d8a259e396685118c4563f24b9c68a4dd1ed9bfd5ceb5e285cf257fc5609c50f

See more details on using hashes here.

Provenance

The following attestation bundles were made for marlin_host-0.2.1-py3-none-any.whl:

Publisher: release.yml on fiberpath/marlin-host

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page