Operations

Every change versioned. View any moment. Restore in one tap.

Per-change versioning across your canvas and BOMs. Edits collapse into one logical version when they're rapid. Time-travel to any past state in read-only mode, restore with a preview of exactly what'll change, or pull up the BOM revision history for any product in the product detail.

Animated demo coming with the next release.

How it works

Per-change, not per-day

Every meaningful write to your canvas (adding a supplier, connecting a BOM, renaming a part, dragging a node) creates a version. Rapid edits by the same person within 30 seconds collapse into one logical version, so dragging a node 200 pixels doesn't create 200 entries. Each version has a human-readable summary, an actor, and a timestamp.

Storage is delta-based with a full snapshot every 25 versions, so a busy 100-node workspace adds about 11MB of history per year. Reads are constant-time worst-case.

Browse + view any version

The canvas header shows the current version number ("v847") with a History button next to it. Open it and a right-rail panel lists every version in reverse chronological order, grouped by day, with timestamp + actor + plain-English summary ("You added supplier Acme + 2 parts. Alan drafted 5 reorder POs. Bob marked task PCB-100 done.").

Click any version → the canvas re-renders in a clearly-labeled "Viewing May 23 14:32 · Read-only" mode. Every node, edge, and position as it was then. Close to return to live; Restore to make it the new current state.

Restore with a preview of exactly what changes

Click Restore on a historic version and a preview modal lists every insert, update, and delete the restore will perform ("3 suppliers will be deleted, 12 supplier edits will be undone, 1 deleted BOM link will be added back"). One Confirm. The restore creates a new version that undoes everything between current and target.

Optimistic concurrency: if someone else made changes between you opening the preview and clicking Confirm, you'll see the refreshed diff and confirm again. No silent overwrites.

Per-product BOM revisions, scoped

Open any subassembly or end product modal. The "BOM versions" tab lists every revision of that product's BOM, scoped to JUST BOM-composition changes for that specific product. Renaming the product, moving its canvas position, or unrelated changes elsewhere don't appear here. Only the BOM matters.

Each entry expands to show the full input list with the changed lines highlighted ("Added 1 × CAP-100, removed 1 × RES-220, changed PCB-RAW from 1 to 2"). A "Restore this BOM version" action rolls back JUST this product's BOM without touching suppliers, customers, or other products.

This is the load-bearing query for quality investigations, warranty work, and customer disputes: "what did PCB-100 look like when we shipped Lakeshore's order in March?"

Why this is the new age of MRP

Legacy MRPs treat your BOM as a single living document. When you edit it, the old version is gone. Production tasks that referenced the old recipe quietly use the new one. There's no paper trail for the quality auditor, no answer for the customer who asks why their last shipment had different specs.

TuringDock versions every change. Your canvas has a full history. Your BOMs are queryable as of any date. Restoring a past state is one tap with a clear preview. The audit trail is the system, not something you bolt on later.

Build what's next. Leave the MRPing to our AI.

Build what's next.

Leave the MRPing to our AI. Sign up free, set your shop up in an afternoon.

Get started for free

Common questions

What gets versioned?
Every write to the canvas: inventory nodes (components, subassemblies, end products), suppliers, customers, supply links (supplier-to-part), BOM links (parent-to-input), customer links (customer-to-product), and canvas positions. Each logical version has a human-readable summary, actor, timestamp, and full delta of what changed.
What's a 'logical version' vs every individual write?
Rapid edits by the same person within 30 seconds collapse into one logical version. So dragging a node from one spot to another, then connecting an edge, then renaming the supplier, all within that window, becomes one version ("You: moved Acme, connected to PCB-RAW, renamed to Acme Plastics Ltd"). This keeps the history readable instead of producing one entry per pixel of drag.
Can I restore to a past version?
Yes. Click any version in the history panel, then Restore. A preview modal lists every insert, update, and delete the restore will perform, so you see exactly what'll change before confirming. The restore creates a new version that undoes everything between current and target — your history isn't rewritten, the original states stay browsable. Optimistic concurrency check on confirm catches any concurrent edits.
How do I see the BOM revision history for one specific product?
Open the product (subassembly or end product) modal and switch to the BOM versions tab. You'll see every revision of that product's BOM specifically, scoped to BOM-composition changes only. Renaming the product or moving its canvas position doesn't appear here. Each entry shows the full input list as of that revision, with diffs highlighted. You can also Restore just that product's BOM without touching the rest of the canvas.
What's the load-bearing use case?
Quality investigations, warranty work, and customer disputes. Six months after shipping an order, a customer reports a defect. You need to know exactly what parts went into that build, with what specifications, on the date you shipped. BOM versioning gives you the answer in one click — open the product, find the revision active on the ship date, see the full input list.
Does this scale?
Yes. Storage is delta-based with full snapshots every 25 versions for fast reads. A 100-node workspace with 30 logical versions per day (typical for active editing) generates about 11MB of history per year. At 1000 workspaces that's ~11GB/year. Reads are constant-time worst-case: load the nearest snapshot, replay at most 24 deltas, render. Tested at 1000-event replay in single-digit milliseconds.
Who is the version attributed to when Alan makes a change?
When Alan drafts a PO or schedules a task on your behalf, the version shows 'Alan (on behalf of You)' with both the actor identity and the user who triggered Alan. Pure cron-driven changes (reorder alerts, shop analysis) attribute to 'cron' with no user. You see who/what made every change in the history panel, never ambiguous.
Can I delete history?
By default no — history is retained forever as the audit trail. If a workspace ever needs history trimmed (data retention policy, compliance), there will be a workspace-level setting to truncate history older than X days. Out of scope for the v1 build.

Last updated 2026-05-27 (foundation shipped; UI + restore in active build)