
Four features we've been testing in select libraries just became standard equipment. No admin setup, no opt-in — they're just there now.
The library dashboard is now your default landing page. Instead of dropping you into a component list, you get the overview first: recent activity, your personal bookmarks, ECOs that need your attention, top contributors, and health metrics. The component list is still one click away, but most people found themselves wanting context before diving into parts. Now you get it by default.
Component labels let you tag parts with custom metadata — think "RoHS compliant" or "preferred vendor" or whatever taxonomy makes sense for your org. We soft-launched this months ago and watched teams build surprisingly surprising classification systems. It's proven itself.
The Altium PCB viewer renders your board files directly in Duro. No downloads, no opening Altium just to see a layout. If you're reviewing a change order that touches a PCB, you can see what actually changed without leaving the browser.
And library pinning — the small one that matters more than it should. Pin the components you use daily to the top of your library part list. Sounds trivial until you're managing thousands of parts and tired of scrolling past the ones you haven't touched in months.
These were lab features because we wanted to validate them with real usage before committing. They passed. They're baseline now.
Also in this release
Change orders now support a "withdrawn" resolution option — for when you need to pull a CO back without rejecting or approving it.
Generated Onshape documents (assemblies, drawings) now flow into change orders automatically when you create them from a release.
Fixes
Fixed a bug where the change order details tab would show unsaved changes even after saving.
Corrected error handling in Onshape document generation — the "failed" state now triggers properly instead of hanging.
Withdrawal notifications and email templates now handle the new resolution type consistently.

You've been able to export BOMs for a while now. But until today, you got what we gave you — a single format, pulling from whatever revision happened to be released. If you needed something different, you were editing spreadsheets after the fact.
Not anymore. Custom export templates let you define exactly what goes into your BOM exports — which columns, what order, how they're labeled. Build a template once, reuse it across components. And here's the part that changes the game: you can now mix and match component versions in a single export. Need to pull your top-level assembly from the released revision but include a pre-release child component you're testing? Done. Export reflects exactly what you're building, not what the system assumes you want.
This is the kind of flexibility you need when you're juggling multiple development streams or coordinating with contract manufacturers who have their own format requirements. Templates save time. Version control gives you accuracy.
Also in this release
Component history now tracks structural changes. BOM additions, removals, and updates all show up in the History tab now. Same for document attachments and label assignments. You can finally see when someone added that fastener or changed that spec sheet — not just who released the component.
Change Order Templates. What was already available in the API, you can now create and customize ECO workflows directly in-app! Create multi-stage, multi-approval workflows, set resolutions to either auto or manual close, and most importantly - create custom form content fields for your engineers to fill out during the ECO creation process.
Fixes
Fixed scrolling behavior, cache invalidation, and sticky header issues flagged during UAT.
Changed the default CAD file sync mode to manual-only. You're in control of when native files get pushed.

We hardened the platform.
This release is mostly what you don't see — the kind of work that makes software reliable instead of just functional. We upgraded 150+ dependencies, patched security vulnerabilities, and fixed edge cases that only surface when systems run long enough to surprise you. The result: Duro is more stable, more secure, and less likely to do something weird at 3am.
One user-facing change made it through: custom colors for categories and attributes. You can now assign colors to organize your data visually — useful when you're scanning long lists or building dashboards. The color picker lives in the category and attribute editors. Pick a color, save it, and it'll show up anywhere that category or attribute appears.
Also in this release
Drawer component improvements — drawers now clamp to reasonable widths on wide screens and support collapsible sections. Less horizontal scrolling, better use of space.
Change order approval logic — fixed a conservative edge case where the system would mark a change order as "not approved" when it actually was. The logic now correctly checks reviewer decisions instead of stage state.
Onshape webhook reliability — webhooks now retry registration if the first attempt fails, and we fixed a race condition during server shutdown that could drop events.
Fixes
Fixed SSE endpoint routing in the Onshape client.
What's new
Drag-and-drop for documents. You can now drag documents directly into assemblies instead of clicking through the upload dialog. Works anywhere you see a drop zone — and if you don't see one, try dragging anyway. We added a persistent zone that shows up when you need it.
Cleaner hover cards. We redesigned the component hover cards with better visual hierarchy. Also removed them from change order item trees where they were more annoying than helpful.
Smarter component search. The component selection drawer now supports custom filter exclusions and base filters. Useful when you need to narrow down what shows up without writing the same query logic everywhere.
UI Refinement. Over a dozen other small UI tweaks made across the application making it more consistent
Improvements & fixes
Fixed a bug where document drag zones would interfere with each other when multiple upload areas were present on the same page.
Added safeguards against accidentally creating circular references when dragging documents into assemblies.
What's new
Exports via API. You can now trigger and manage exports programmatically. More to come on this.
Auto-sync part renames from Onshape. Change a part name in Onshape, see it update in Duro. One less manual step in your workflow.
Change order filtering by last updated. Filter COs by when they were last touched. Useful when you're hunting down what changed recently.
Improvements & fixes
Fixed an issue where sensitive export data wasn't getting cleared when jobs failed or got cancelled. It is now.
Improved how we look up components when loading tree views — CPN-first now, which means fewer mismatches.
Cleaned up a bunch of internal query logic that was causing occasional hiccups in component lookups.
Various stability improvements across the board. Nothing dramatic, just tightening bolts.

We upgraded our API router from Apollo 1.42 to 2.12. They rewrote the thing in Rust. You'll notice — page-to-page navigation is faster across the board!
What's new
Onshape part renames now sync automatically. Change a part name in Onshape, it updates in Duro. One less thing to remember.
Shift-click to select ranges in checkbox lists. Works like your email inbox now — click one, shift-click another, everything in between gets selected.
Reference designator validation happens inline. The assembly tree shows you invalid refDes entries as you type. No more waiting until save to find out you messed up the format.
Improvements & fixes
Fixed select-all accidentally grabbing disabled items in the selection sidebar.
Cleaned up non-functional sections in change order YAML templates.
Patched a handful of Onshape sync edge cases — malformed Redis dates, deduplication quirks, the usual suspects.
This one's mostly infra and Onshape refinements — nothing flashy, but the kind of stuff that makes the product feel tighter.
What's new
Faster Onshape auth for returning users. After you OAuth with Onshape, we cache your credentials and skip redundant network calls on subsequent visits. The cache is scoped to your Auth0 identity, so no cross-contamination if you switch accounts.
Assembly change detection in Onshape. The client now polls for microversion changes and tracks visibility state. Useful if you're working with live assemblies and need to know when something upstream shifted.
DXF support in SolidWorks integration. You can now pull DXF files through the SolidWorks connector. One less export step.
Improvements & fixes
Fixed sub-assembly matching when re-expanding the Onshape tree. It was getting confused with nested structures.
Corrected truncated field names in the Onshape credentials query. Copy-paste error from an earlier refactor.
Added guards to prevent non-DESIGN components from being deleted or having their category/CPN updated. You shouldn't have been able to do that anyway.
Included attribute type in sync/update logic. Was missing, caused silent failures in edge cases.
What's new
Change order templates. You can now pass a template ID when creating change orders. Less setup, more consistency across your org.
Empty state component. Added a proper empty state UI for tabs and pages that have nothing to show yet. Small thing, but it's nicer than staring at blank space.
Assembly exports. STL and Parasolid file generation now works for assemblies, not just parts. Runs async so it won't block your workflow.
BOM quantity enforcement. If you've mapped BOM hierarchy, quantity is now required. Prevents incomplete data from sneaking through.
Improvements & fixes
Fixed a TCP socket leak in S3/R2 storage that could cause upload confirmations to hang. Not great! Now patched.
Prevented orphaned multipart uploads when one part fails.
Cleaned up BOM import auto-mapping. Added missing quantity aliases and fixed fuzzy matching that was too aggressive on hierarchy fields.
Better logging for HTTP/HTTPS socket pools. Makes debugging connection issues less painful.
That's it for a Monday. Smile.