Releases: plexus-oss/plexus-python
v0.4.5 — Stderr status output
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 /ingeston WS failure✗ Auth rejected by gateway: …/✗ Gateway rejected the API key (401)on auth failures, with aplexus whoamihint⏸ Send failed, buffering points locally (N queued)when offline✓ Sending again (drained the local buffer)on recovery
v0.4.4 — Stderr status output
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 /ingeston WS failure✗ Auth rejected by gateway: …/✗ Gateway rejected the API key (401)on auth failures, with aplexus whoamihint⏸ 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__
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
Changed
- The localhost callback rendered after
plexus initnow 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
Stable device identity + CLI (v0.4.0) plus CI lint and threading-test fix (v0.4.1).
- New
plexus init(aliasplexus login) browser auth flow that persists a key to~/.plexus/config.jsonover a localhost callback. PLEXUS_INSTALL_IDenv 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.objectout 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
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/deviceon the gateway. Exchanges the samedevice_auth/authenticated/telemetry/heartbeat/typed_command/command_resultframes asplexus-c.Plexus(transport="ws" | "http")— defaults to"ws".Plexus.on_command(name, handler, ...)— register command handlers; automaticack, return value becomesresult, exceptions becomeerror.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
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 startdaemon, CLI, TUI. - Kept:
Plexusclient 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) intopx.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
Initial release of plexus-python.
What's here
Plexusthin client for HTTP ingest to the Plexus gatewayplexus startdaemon 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