{"slug": "micropipe-pipe-on-a-microcontroller-preview", "title": "🌍 MicroPipe — Pipe on a Microcontroller (Preview)", "summary": "MicroPipe, a dependency-free Python re-implementation of the Pipe language core, now runs on a $5 ESP32 microcontroller, verified against the real pipe v0.9.4 binary. It supports ~59 curated builtins, an MCP client over HTTP and stdio, and is MicroPython compatible, enabling sensor reads, MCP server calls, and GPIO toggling with the same syntax as server-side pipelines. The preview is available via pip install from GitHub and is MIT licensed.", "body_md": "[← All posts← Alle Beiträge](../blog.html)\n\n# 🌍 MicroPipe — Pipe on a Microcontroller (Preview)\n\n**Pipe's pitch is one language for every layer — WASM in the browser, an ~8 MB binary on servers and Raspberry Pi. MicroPipe closes the last gap: a faithful re-implementation of the core that runs on a $5 ESP32.**\n\nMicroPipe is a dependency-free Python re-implementation of the Pipe language core, verified **against the real pipe v0.9.4 binary** with a side-by-side comparison harness. It targets CPython (for tests and development) and\n\n**MicroPython**(for the ESP32 and other microcontrollers). No pip dependencies — the stdlib is all it uses.\n\nWhat hangs on a microcontroller, you drive with the same language as your pipelines: read a sensor, call an MCP server over the LAN, toggle a GPIO. Same syntax, same pipelines, same `mcp_use_sse`\n\n.\n\n### What works today\n\n**The faithful core**: precedence, vertical pipelines, closures, recursion,`if`\n\n/`while`\n\n/`for`\n\n, lists/maps/slicing,`>>`\n\nparsed — every behaviour checked against pipe v0.9.4.**~59 curated builtins**— the ones that make sense on a small device:`map`\n\n,`filter`\n\n,`reduce`\n\n,`sum`\n\n,`unique`\n\n,`parse_json`\n\n,`sleep`\n\n, file I/O, plus the MCP bridge.**MCP client over HTTP and stdio**:`mcp_use_sse \"http://192.168.178.78:8000/mcp\"`\n\nexposes every server tool as`mcp0_<tool>`\n\ninside your Pipe program.**MicroPython compatible**: identifier checks that survive the missing`str.isalnum`\n\n, a`urequests`\n\n-or-raw-socket HTTP fallback, and an import layout that works as a flat package on the device.\n\n```\nout: mcp_use_sse \"http://192.168.178.78:8000/mcp\"\nprint out\n\nreading: parse_json (mcp0_sensor_read 1)\nprint \"sensor:\" (reading[\"value\"]) (reading[\"unit\"])\n\nstate: if (reading[\"value\"]) > 23.0\n    \"on\"\nelse\n    \"off\"\nprint \"led:\" (mcp0_led_set state)\n```\n\nVerified on real hardware — an ESP32-D0WD-V3 running MicroPython v1.28.0:\n\n```\nwifi connected: 192.168.178.81\nMicroPipe ESP32 demo started\n[pipe] connected 5 tools from http://192.168.178.78:8000/mcp (prefix: mcp0_)\n[pipe] temp: 27.5\n[pipe] led: on\n```\n\n### What it is not — yet\n\nHonest scope, because a preview should say so:\n\n**No AI builtins.**`summarize`\n\n,`ask`\n\n,`embed`\n\nneed a server that doesn't fit on a device. The intended bridge: run Pipe itself as the MCP server and call *it*.**No sandbox, no bytecode VM, no** It's a tree-walker.`pipe -build`\n\n.No real on-device parallelism — yet.`>>`\n\nis parsed but executed sequentially.**MCP client only**— the server side stays in the Go binary.\n\nThink of MicroPipe as the **embedded edition**: the same language for all the things that aren't servers.\n\n### Try it\n\n```\npip install git+https://github.com/MachuraHarry/micropipe\n```\n\nExamples in the repo: a Fibonacci, a `map`\n\n/`filter`\n\n/`reduce`\n\npipeline, and the MCP sensor demo above (`examples/*.mpipe`\n\n). The README covers flashing an ESP32, WiFi, and the MCP server setup.\n\nIt's a preview, it's MIT, and it's the natural next target for `>>`\n\nparallelism and the embedded MCP client. [Star it on GitHub](https://github.com/MachuraHarry/micropipe) or open an issue.\n\n# 🌍 MicroPipe — Pipe auf dem Mikrocontroller (Preview)\n\n**Pipes Versprechen ist eine Sprache für jede Ebene — WASM im Browser, eine ~8-MB-Binary auf Servern und Raspberry Pi. MicroPipe schließt die letzte Lücke: eine treue Neuimplementierung des Kerns, die auf einem 5-Dollar-ESP32 läuft.**\n\nMicroPipe ist eine abhängigkeitsfreie Python-Neuimplementierung des Pipe-Sprachkerns, **gegen die echte pipe-v0.9.4-Binary verifiziert** (Side-by-Side-Vergleichs-Harness). Zielplattformen: CPython (für Tests und Entwicklung) und\n\n**MicroPython**(für den ESP32 und andere Mikrocontroller). Keine pip-Abhängigkeiten — nur die Standardbibliothek.\n\nWas an einem Mikrocontroller hängt, steuerst du mit derselben Sprache wie deine Pipelines: Sensor lesen, MCP-Server im LAN ansprechen, GPIO schalten. Gleiche Syntax, gleiche Pipelines, gleiches `mcp_use_sse`\n\n.\n\n### Was heute funktioniert\n\n**Der treue Kern**: Präzedenz, vertikale Pipelines, Closures, Rekursion,`if`\n\n/`while`\n\n/`for`\n\n, Listen/Maps/Slicing,`>>`\n\ngeparst — jedes Verhalten gegen pipe v0.9.4 geprüft.**~59 kuratierte Builtins**— die, die auf einem kleinen Gerät Sinn ergeben:`map`\n\n,`filter`\n\n,`reduce`\n\n,`sum`\n\n,`unique`\n\n,`parse_json`\n\n,`sleep`\n\n, Datei-I/O, dazu die MCP-Brücke.**MCP-Client über HTTP und stdio**:`mcp_use_sse \"http://192.168.178.78:8000/mcp\"`\n\nmacht jedes Server-Tool als`mcp0_<tool>`\n\nin deinem Pipe-Programm verfügbar.**MicroPython-kompatibel**: Identifier-Checks ohne das fehlende`str.isalnum`\n\n, ein`urequests`\n\n-oder-Raw-Socket-HTTP-Fallback und ein Import-Layout, das auch als flaches Paket auf dem Gerät funktioniert.\n\n```\nout: mcp_use_sse \"http://192.168.178.78:8000/mcp\"\nprint out\n\nreading: parse_json (mcp0_sensor_read 1)\nprint \"sensor:\" (reading[\"value\"]) (reading[\"unit\"])\n\nstate: if (reading[\"value\"]) > 23.0\n    \"on\"\nelse\n    \"off\"\nprint \"led:\" (mcp0_led_set state)\n```\n\nVerifiziert auf echter Hardware — einem ESP32-D0WD-V3 mit MicroPython v1.28.0:\n\n```\nwifi connected: 192.168.178.81\nMicroPipe ESP32 demo started\n[pipe] connected 5 tools from http://192.168.178.78:8000/mcp (prefix: mcp0_)\n[pipe] temp: 27.5\n[pipe] led: on\n```\n\n### Was es (noch) nicht ist\n\nEhrlicher Scope — ein Preview soll das sagen:\n\n**Keine KI-Builtins.**`summarize`\n\n,`ask`\n\n,`embed`\n\nbrauchen einen Server, der nicht auf ein Gerät passt. Die vorgesehene Brücke: Pipe selbst als MCP-Server laufen lassen und *den* aufrufen.**Kein Sandbox, keine Bytecode-VM, kein** Es ist ein Tree-Walker.`pipe -build`\n\n.Noch keine echte Parallelität on-device.`>>`\n\nwird geparst, aber sequenziell ausgeführt.**Nur MCP-Client**— die Server-Seite bleibt in der Go-Binary.\n\nDenk also an MicroPipe als **Embedded-Edition**: dieselbe Sprache für alles, was kein Server ist.\n\n### Ausprobieren\n\n```\npip install git+https://github.com/MachuraHarry/micropipe\n```\n\nBeispiele im Repo: ein Fibonacci, eine `map`\n\n/`filter`\n\n/`reduce`\n\n-Pipeline und die MCP-Sensor-Demo von oben (`examples/*.mpipe`\n\n). Die README behandelt ESP32-Flashing, WLAN und das MCP-Server-Setup.\n\nEs ist ein Preview, es ist MIT, und es ist das nächste natürliche Ziel für `>>`\n\n-Parallelismus und den eingebetteten MCP-Client. [Auf GitHub markieren](https://github.com/MachuraHarry/micropipe) oder ein Issue eröffnen.", "url": "https://wpnews.pro/news/micropipe-pipe-on-a-microcontroller-preview", "canonical_source": "https://pipe-lang.com/blog/micropipe-esp32.html", "published_at": "2026-08-16 00:00:00+00:00", "updated_at": "2026-08-16 12:41:34.041235+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure"], "entities": ["MicroPipe", "Pipe", "ESP32", "MicroPython", "CPython", "MCP", "GitHub", "MachuraHarry"], "alternates": {"html": "https://wpnews.pro/news/micropipe-pipe-on-a-microcontroller-preview", "markdown": "https://wpnews.pro/news/micropipe-pipe-on-a-microcontroller-preview.md", "text": "https://wpnews.pro/news/micropipe-pipe-on-a-microcontroller-preview.txt", "jsonld": "https://wpnews.pro/news/micropipe-pipe-on-a-microcontroller-preview.jsonld"}}