Skip to main content

What’s new at Endless

Changelog

The latest features, improvements, and fixes across Endless Commerce.

improvement

Product Sheet Loads Smaller Thumbnails For Shopify-Hosted Photos

When product photos are hosted on Shopify, the product sheet, table, and grid now ask for the thumbnail size the cell actually renders at, instead of the full-resolution original. On a catalog of print-resolution photos, page one dropped from about 13 MB of image transfer to about 270 KB, and the browser is decoding roughly one percent of the pixels it used to.

Photos hosted on our own storage or on Cloudinary are unchanged; those fall through to the original as before, and the separate variant work covers them.

fix

Product Exports Finish On Large Catalogs

Product exports now finish for the largest catalogs. The export was loading every combination of image, tag, and attribute row into memory before writing the first row, so a company with a few hundred products was pulling in more than a hundred thousand rows and the worker ran out of memory. The request would sit in Processing and then disappear from the list.

Five companies had exports that never completed since May. Those same catalogs now export in about a second. The row counter is also wired to the same progress update every other export uses, so the request no longer times out after fifteen minutes and vanishes while the job is still running.

feature

Product Costs: Enter Once, Used Everywhere

Unit Cost, Landed Cost, and Dropship Unit Cost are now three clear, distinct fields on every product — editable from the product page, the Costs product sheet, or CSV import. Purchase order lines and dropship fulfillment lines default to the right cost automatically, and margin uses Landed Cost with Unit Cost as a fallback, so an incomplete cost is never shown as profitability. All three carry their full precision everywhere they’re shown, including the product sheet.

fix

Available-To-Make Uses The Same Availability Fulfillment Does

Available-to-make on a bundle understated its component every time the component itself was composable and had no physical stock on hand. The rollup was reading each component’s plain “available” number — which leaves out anything that has to be built from its own components — so a bundle whose components had to be made returned zero, and an alias (which gets its whole availability from one component) reported the same.

Available-to-make now measures each component the same way fulfillment does when it decides whether the parent can be allocated. The number on the page and the number a real allocation would use no longer disagree, so a bundle whose components can be built and an alias whose source component can be built both report the units that can actually go out. Nested composables refresh in the right order in a single sweep, so the rollup converges the first time instead of catching up on the next hourly pass.

improvement

Product Tariff Calculator: Opens The In-App Tool

The “Tariff Calculator” link on a product’s Customs Information card now opens the in-app Tariffs tool for companies with the tool enabled, instead of the external tariffs site. The external-link icon on the link only shows when it still points at the external site.

feature

Manage Images: Remove Images from the DAM

You can now remove a product image from the DAM. In Manage Images, each image card gets a Trash action, and the sidebar exposes destructive Archive Image / Archive Images actions for single and multi selection. Pick one or many, confirm the archive dialog, and they’re removed from the DAM; unsaved edits are guarded before the archive runs, and the grid refreshes when it’s done.

Underneath, archiveImage soft-deletes the image and cascades the cleanup — the original is archived, every image variant is archived via the same cascade, and every image_relationships row pointing at it is destroyed in one transaction. Guarded by media:update_image and scoped so an image belonging to another company is rejected before anything is touched.

feature

Alias: A New Composable Product Type For Legacy And External SKUs

Alias is now a product type alongside Base Item, Bundle, and Part. Reach for it when a legacy or external identifier — an old SKU your customers still order under, a channel’s catalog code, a vendor part number — needs to point at the real product without duplicating its data. An Alias is defined by its components, so it inherits its price, weight, dimensions, and imagery from what it stands for.

Alias shows up everywhere Bundles do. Create and edit Aliases from the product form with the same component manager (Base Items and Parts are valid components, and the quantity stays as guidance rather than hard enforcement so alternate-unit aliases are workable). Filter by Alias in the product list, inventory views, and Purchase Order product pickers. Import Aliases through product imports, and target them in bulk edit. The identity styling and badge make Aliases easy to spot at a glance in lists and on the product sheet.

Available-to-make inventory keeps up with Alias just like Bundles. Adding, changing, or removing an Alias’s components immediately recalculates its available-to-make, company-wide inventory recalculation includes Aliases, and removing the last composition line clears its available-to-make cleanly. Orders decompose Aliases through the same composition path as Bundles, so fulfillment picks the underlying components.

fix

Product Search: Fast Again On Very Large Catalogs

Searching for a product to add to a Purchase Order, a Supply Shipment, a bundle, an echo SKU, or from the command palette now returns results quickly on very large catalogs — pages that used to time out and show “No products found” on accounts with over a hundred thousand products come back in a fraction of a second. Name and SKU search return the same products as before, just fast enough to actually use.

improvement

Ordered Quantities: Faster For High-Volume Products

Ordered-quantity calculations return much faster for products with a lot of order history. The query for a hot SKU used to take around 20 seconds and get worse under load; it now takes about 7 seconds with the same results. The V2 unassigned-quantity calculation also stopped joining every warehouse just to zero most of them out — totals are unchanged, it’s just less work per call.

improvement

Order Items: “Not In Catalog” Badge Opens Link Product

The “Not in Catalog” status badge on an order item is now clickable and opens the Link Product action directly. Before, that action lived behind the item’s edit menu and then a three-dot menu, so most people never found it. Clicking the badge takes you straight there.