Skip to content

Changelog

Stay up to date with new features and improvements.

May 4, 2026CLI 0.20.0Dashboard 2.21.5

Stations v2.0

A headless-first rewrite of TofuPilot Stations: more hardware architectures supported, real-time control from the web, isolated artifacts, and push-to-deploy with environments.

  • Rebuilt on a headless core that runs on Raspberry Pi (arm64), Linux (amd64/arm64), Windows, and macOS: pick a kiosk UI, terminal UI for SSH and edge boxes, or no UI at all
  • Streamed every station live to the web for remote control and telemetry, with the offline queue and full Framework UI components carried over from v1
  • Replaced repo-pull with a managed artifact system so stations never touch your Git provider directly
  • Auto-deployed on merge to your configured environments, with skippable preview environments matched by branch pattern
  • Run TofuPilot Framework procedures end-to-end from your repo to your stations
April 20, 2026Dashboard 2.20.29

Fix deployment commit filters

  • Fixed commit list filters on the deployments page that weren't connected to commit data, causing confusing empty results.
  • Laid the server, worker, and UI foundations for the upcoming Station v2 release.
April 17, 2026Dashboard 2.20.23

Fix part validation blocking unit creation

Creating a unit from a part with ., :, or + in its number used to fail with a raw validation blob. Validation now matches what part creation allows, and errors are readable.

  • Fixed unit creation rejecting valid parts whose numbers contain ., :, or +
  • Improved error messages in modals to show a clear one-line reason instead of a raw JSON payload
  • Added a Copy action on error toasts so you can share the exact message with support
April 17, 2026Dashboard 2.20.19

Smoother GitHub setup on self-hosted

Self-hosted installations can now connect GitHub with clearer feedback at every step.

  • Repository picker lists all repositories from GitHub and GitLab
  • Connection errors surface clearly for easier troubleshooting
April 16, 2026Dashboard 2.20.11

Add named data series and multi-axis charts

Multi-dimensional measurements now support named data series with independent units, enabling richer time-series visualizations.

  • Added name field to data series, allowing each axis to carry a label (e.g. "Frequency", "Voltage")
  • Moved units from measurement level to individual data series for per-axis unit control
  • Added multi-axis Y chart support with independent scales when series have different units
  • Added interactive series toggle in chart legend to show/hide individual data series
April 14, 2026Dashboard 2.20.4

Fix workflow trigger accuracy

Workflows could incorrectly trigger from unrelated events.

  • Fixed workflow execution to correctly fire only on matching events
  • Improved organization-level filtering in workflow endpoints
April 12, 2026Dashboard 2.19.0Python SDK 2.2.6C# SDK 2.3.3Rust SDK 2.1.4C++ SDK 2.0.2MATLAB SDK 2.0.2

Attach files to runs and units in one call

Uploading files to test runs and units used to require three API calls (initialize, PUT, finalize) plus a fourth to link the attachment. Now it's one call across all five SDK clients.

  • Added runs.attachments.upload() and units.attachments.upload() helpers that handle the full upload flow in a single call across Python, C#, Rust, C++, and MATLAB
  • Added units.attachments.delete() to remove attachments from units by ID
  • Added runs.attachments.download() and units.attachments.download() to download attachments to local files
from tofupilot.v2 import TofuPilot

client = TofuPilot()

# Upload a file to a run
client.runs.attachments.upload(id=run.id, file="data/test-report.pdf")

# Upload a file to a unit
client.units.attachments.upload(serial_number="SN-0001", file="data/calibration.pdf")

# Download
client.runs.attachments.download(attachment, dest="local-report.pdf")

# Delete (units only)
client.units.attachments.delete(serial_number="SN-0001", ids=[attachment_id])
April 11, 2026Dashboard 2.18.2

Support timezone offsets in datetime fields

Timestamps with timezone offsets like +02:00 or +05:30 now work across all API endpoints. You no longer need to convert to UTC before uploading.

  • Accepted timezone offsets on all datetime input fields: run timestamps, phase and log timestamps, and date filters on runs, units, batches, and procedures
  • Responses still return UTC (Z suffix), no changes needed on the read side
from datetime import datetime, timezone, timedelta

# UTC (always worked)
client.runs.create(
    started_at=datetime.now(timezone.utc),
    ended_at=datetime.now(timezone.utc),
    ...
)

# Local timezone (now works too)
cet = timezone(timedelta(hours=2))
client.runs.create(
    started_at=datetime.now(cet),
    ended_at=datetime.now(cet),
    ...
)
April 11, 2026Dashboard 2.18.0

Automate test actions with workflows

Trigger automated actions when test events occur. Connect your test data to the tools your team already uses, without writing glue code.

  • Added visual workflow editor with drag-and-drop nodes, branching (if/else, switch), filters, and versioning
  • Added integrations for Odoo, Linear, InvenTree, Discord, Slack, email, and generic HTTP
  • Added execution history with per-step status, error details, and flow visualization
April 9, 2026Dashboard 2.17.8

Compare measurements on SPC charts

Control charts were limited to one measurement at a time. You can now overlay multiple compatible measurements on a single chart to spot correlations and trends across your process.

  • Added multi-measurement selection with Shift-click on the measurement overview, with compatibility checks (same type and units)
  • Added phase filter in sidebar showing data point counts per phase when multiple measurements are selected
  • Added compatibility tooltips showing which criteria match or mismatch when selecting measurements
  • Limits and Cpk tab now hide automatically when selected measurements have different spec limits

Try these features today