Skip to content

Changelog

Stay up to date with new features and improvements.

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
python
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
python
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
April 9, 2026MATLAB SDK 2.0.0

Upload test results from MATLAB

You can now upload runs, manage parts, and query test data directly from MATLAB -- no middleware, no CSV exports.

  • Upload runs with measurements, limits, and attachments in a few lines of MATLAB code
  • Query and filter units, batches, and procedures from your test scripts
  • Automatic retries on transient errors so uploads don't fail mid-production
  • Ships as a .mltbx toolbox -- install once, available across all your projects
April 7, 2026C++ SDK 2.0.0

Ship test data from C++

Teams running C++ test scripts can now upload runs, measurements, and attachments to TofuPilot directly from their codebase.

  • Added full V2 API coverage for runs, units, parts, batches, stations, procedures, and attachments
  • Added builder-pattern API for creating runs with phases, measurements, validators, and logs
  • Added one-call file upload and download helpers for test reports and artifacts
April 7, 2026Dashboard 2.17.4

Improve process control and chart export

Process control gets smarter defaults, better filtering, and a new PDF export for sharing charts outside TofuPilot.

  • Added A4 landscape PDF export for charts with title and "Exported by" attribution
  • Added validators column and measurement outcome filter to the process control measurement table
  • Added default 30-day date filter on runs, logs, and API calls pages for faster initial load
  • Fixed invisible connecting lines between points on control charts
  • Fixed missing procedure, phase, unit, and run outcome on measurement detail page

Try these features today