Skip to content

Releases: plexus-oss/plexus-python

v0.4.5 — Stderr status output

27 Apr 20:33

Choose a tag to compare

Same code as the failed v0.4.4 (which 4xx'd in CI on a stray f-prefix), now lint-clean.

Added

[plexus] … status lines on stderr at every meaningful state change so scripts that don't configure the logging module still tell the user what's going on. Set PLEXUS_QUIET=1 to suppress.

  • ✓ Connected to gateway as <source_id> on first WS auth
  • ✓ Reconnected as <source_id> after a drop
  • ✓ First N points landed (via ws|http) on first successful send
  • ⚠ WebSocket unavailable, falling back to POST /ingest on WS failure
  • ✗ Auth rejected by gateway: … / ✗ Gateway rejected the API key (401) on auth failures, with a plexus whoami hint
  • ⏸ Send failed, buffering points locally (N queued) when offline
  • ✓ Sending again (drained the local buffer) on recovery

v0.4.4 — Stderr status output

27 Apr 20:31

Choose a tag to compare

Added

[plexus] … status lines on stderr at every meaningful state change so scripts that don't configure the logging module still tell the user what's going on. Set PLEXUS_QUIET=1 to suppress.

  • ✓ Connected to gateway as <source_id> on first WS auth
  • ✓ Reconnected as <source_id> after a drop
  • ✓ First N points landed (via ws|http) on first successful send
  • ⚠ WebSocket unavailable, falling back to POST /ingest on WS failure
  • ✗ Auth rejected by gateway: … / ✗ Gateway rejected the API key (401) on auth failures, with a plexus whoami hint
  • ⏸ Send failed, buffering points locally (N queued) when offline
  • ✓ Sending again (drained the local buffer) on recovery

Why

Users running python my_script.py saw nothing — by default Python's logging module emits at WARNING and above only on the console, so a silent SDK was indistinguishable from "everything's working" until they checked the dashboard. This makes the trip from python my_script.py to "first row visible in the UI" auditable in one terminal.

v0.4.3 — Re-release of 0.4.2 with correct __version__

27 Apr 19:05

Choose a tag to compare

Re-release of 0.4.2. The 0.4.2 wheel shipped with plexus.__version__ == "0.4.1" because the tag was cut one commit before the __init__.py bump landed. 0.4.3 is the same code with the version metadata correct. 0.4.2 has been yanked.

See the 0.4.2 release notes for the actual changes (branded CLI auth success page + 10s auto-redirect to the app).

v0.4.2 — Branded CLI auth + auto-redirect

27 Apr 18:58

Choose a tag to compare

Changed

  • The localhost callback rendered after plexus init now matches the Plexus app's dark UI (black bg, zinc-800 bordered card, white headline, monospace URL, status-color badge) instead of using browser defaults.
  • After authorization, the page auto-redirects to the configured app endpoint (PLEXUS_ENDPOINT, default https://app.plexus.company) after a 10-second countdown so first-time users land on their dashboard without navigating manually. Meta-refresh fallback for JS-off browsers.

v0.4.1

27 Apr 18:36

Choose a tag to compare

Stable device identity + CLI (v0.4.0) plus CI lint and threading-test fix (v0.4.1).

  • New plexus init (alias plexus login) browser auth flow that persists a key to ~/.plexus/config.json over a localhost callback.
  • PLEXUS_INSTALL_ID env var override for ephemeral containers (Fly, k8s, CI) so a redeploy doesn't churn the gateway-assigned source_id.
  • Doc cleanup: drop obsolete project-structure block in AGENTS.md, fix SECURITY.md table whitespace, show api_key in examples/basic.py.
  • cli.py: drop spurious f-prefix on a non-interpolated string (ruff F541).
  • test_retry.py: hoist patch.object out of the per-thread closure; mock.patch.object isn't thread-safe and was racing under 20 concurrent threads, surfacing as a spurious AttributeError on Python 3.8.

v0.3.0 — WebSocket transport

12 Apr 19:58

Choose a tag to compare

Wire-compatible WebSocket transport matching plexus-c. WS is now the default; HTTP /ingest is used as an automatic fallback when the socket is unavailable.

Added

  • plexus.WebSocketTransport — connects to /ws/device on the gateway. Exchanges the same device_auth / authenticated / telemetry / heartbeat / typed_command / command_result frames as plexus-c.
  • Plexus(transport="ws" | "http") — defaults to "ws".
  • Plexus.on_command(name, handler, ...) — register command handlers; automatic ack, return value becomes result, exceptions become error.
  • Plexus.close() now also stops the WebSocket thread.
  • Runtime dep: websocket-client>=1.7.
  • Tests: tests/test_ws.py (auth handshake, telemetry, command roundtrip, error paths).

v0.2.0 — Thin SDK rewrite

12 Apr 19:07

Choose a tag to compare

Breaking release. plexus-python is now just the thin client — 886 LOC, one runtime dep (requests).

What changed

  • Removed: adapters (MAVLink/CAN/MQTT/Modbus/OPC-UA/BLE/Serial), I2C sensor drivers + auto-detect, camera/frame support, plexus start daemon, CLI, TUI.
  • Kept: Plexus client with retry, batching, and persistent SQLite buffer.
  • New: 5 recipe scripts in examples/ showing how to pipe upstream libraries (pymavlink, python-can, paho-mqtt, Adafruit CircuitPython) into px.send().

Install

pip install plexus-python

Quick start

from plexus import Plexus
px = Plexus(api_key="plx_xxx", source_id="device-001")
px.send("temperature", 72.5)

See CHANGELOG.md for the full list.

v0.1.0 — Initial release

12 Apr 18:15

Choose a tag to compare

Initial release of plexus-python.

What's here

  • Plexus thin client for HTTP ingest to the Plexus gateway
  • plexus start daemon with WebSocket streaming
  • Protocol adapters: MAVLink, CAN, MQTT, Modbus, OPC-UA, Serial, BLE
  • I2C sensor auto-detection and drivers
  • Store-and-forward buffering (SQLite)

Install

pip install plexus-python