Changelog
Notable changes to the Orchard platform and these docs. Newest first.
This log focuses on what’s visible to merchants and integrators — API behavior, webhooks, admin capabilities, and documentation. Internal-only changes are omitted. Dates are when the change shipped.
How this is maintained
- Entries are added when a change reaches production.
- Breaking changes to the
/api/v1surface are called out explicitly and, where possible, announced before they ship. - The API Reference is generated from the live route code, so it always reflects what is deployed; this changelog is the human-readable summary of what moved.
2026-08-11
Bundles can’t sell unreleased products, and say why they’re unavailable. A bundle could previously be purchased as long as its component products had stock on the shelf — even when one of them hadn’t launched yet, or had been archived. Now a bundle is sellable only when every component is released and active: archiving a product reliably pulls every bundle that contains it.
And instead of one ambiguous “sold out”, your storefront can now tell the difference: a bundle waiting on a not-yet-launched component reads as coming soon, while a bundle whose components are simply out of stock reads as sold out. Same refusal to sell, honest reason.
Edit your site’s words right on the page. You can now change the words on your storefront the way you’d fix a label by hand — open your site in edit mode, click the text, and type. Saving keeps your new wording as a private draft only you can see, shown in place so you can read it in context; publishing makes it live for every visitor within seconds, with no deploy and no waiting. Discard throws the draft away and the original stays.
The homepage’s headings, paragraphs, and section copy are editable first, with more pages becoming editable over time. Numbers that come from your real catalog — prices, savings, product names in listings — stay read-only on purpose, so the site can never promise a price checkout doesn’t charge.
If a piece of copy is flagged as claims-sensitive, saving a draft also checks the wording and shows you any phrases worth softening, right where you’re typing. Publishing flagged copy still asks for a compliance review — the check is a helper, not a gate.
Let buyers collect an order in person. A promo code can now offer in-person collection at checkout. Add a pickup location under Settings → Fulfillment → Pickup, then switch on Also offer in-person pickup on a product-price promo. Shoppers who apply that code see a free “Pickup” option next to your normal shipping rates — added alongside them, not instead of them.
Nothing about a collected order pretends it was posted. The confirmation email and thank-you page say where and when to collect it, no shipping confirmation is ever sent, and carrier updates are ignored for it. In the admin, pickup orders carry a Pickup badge, the orders list gains a Delivery/Pickup filter, tracking and label fields are hidden, and the order advances by hand: awaiting pickup → ready for pickup → picked up.
The buyer’s phone number is now saved on the order alongside their name and email, so you can reach whoever is coming to collect.
With no pickup location saved, no pickup option appears.
Sell chosen products at a set price with a code. A promo code can now put a fixed price on the products you choose — seasonal oxymels at $10 instead of $30 — while everything else in the cart stays at its normal price. Pick the products on the promo form, set the price, and optionally cap how many items get it per order: with a cap of 3, a customer buying 5 pays the special price on 3 and the normal price on 2, shown as separate lines so the receipt is honest about both.
The same code can also make shipping free, for customers who collect in person — worth having, since a customer can only use one code per order.
The code applies to one-time purchases only, never to subscriptions, and it refuses rather than doing nothing when a customer’s cart has none of the chosen products — they get a message telling them to add one. It also refuses if the price you set is no longer below what those products currently cost, so a code can never make an order more expensive.
Session close-out is easier to fill in. Counting stock at the end of a session no longer fights you. The quantity boxes can’t be changed by scrolling the page, each row shows a running “3 of 4 assigned” as you type, and when a row doesn’t add up the message names the field to change and by how much.
Destinations are named for what happens to the stock — Online stock (sellable on the website) rather than “warehouse” — and one click sends a row, or the whole session, to the place it usually goes. Anything still required to confirm is listed next to the button, with a link straight to the first thing to fix.
The quiz editor is a workspace now. Editing a quiz no longer means scrolling one long form hunting for Save. The editor is now a workspace: Save and your unsaved-changes status stay pinned at the top, an outline on the left jumps you straight to any question, and question types read as plain words — “Pick one”, “Pick many” — instead of system names. Deleting an answer that helps decide recommendations warns you in plain language first, and the version number takes care of itself.
There’s also a live preview: see the question you’re editing the way a shopper will, or press “Try it” to answer the whole quiz and watch which product the real scoring engine recommends. Under each answer, a plain sentence now explains what it does — “Calm blend +1” or “Doesn’t affect recommendations” — so scoring stops being a black box.
Two smaller fixes ride along: answers can carry extra descriptive lines (used for richer option cards on your storefront), and result headings that use the matched product’s name now actually show it — previously that placeholder rendered blank for shoppers.
2026-08-10
Banner rows open in place. Rows on the banners list used to be inert — the only way to see a banner’s details was the Edit link. Pressing anywhere on a row now expands it in place, showing the banner’s type, audience, priority, window and state without leaving the list.
Edit still works exactly as before, one click on the Actions column. This brings banners in line with the other admin lists, where expanding a row is already how you peek at a record without opening it.
Four API key permissions were missing from the key form. Creating an API key now offers every permission the API actually supports. Four were missing from the form — covering reviews, subscription changes, the checkout read surface, and storefront edit mode — so a key that needed one of them simply could not be issued.
Publishable (pk_) keys are also now correctly refused the two
server-only permissions that are named as actions rather than reads or
writes; previously only the form discouraged it.
The orders list now shows the time an order came in. The Created column on your orders list showed the date an order was placed but not the time, so on a busy day every order read the same and there was no way to tell which one arrived first without opening it. It now shows the time of day alongside the date, down to the minute, in your own time zone. Sorting by Created is unchanged.
Subscription checkout works again. Trying to subscribe to a product failed at checkout with “We couldn’t start checkout right now” — every time, for any store with shipping rates configured. One-time purchases were unaffected.
The cause: checkout offered its shipping-rate choices on subscription sessions too, and Stripe only accepts those on one-time payments. The subscription session now leaves them off — shipping for a subscription is part of the recurring price, and the delivery address is still collected as before.
If a customer told you checkout was failing on a subscription, this was it, and it is fixed.
Twelve more admin lists open in place. Banners learned to expand a row in place last week. Twelve more lists now do the same: suppliers, ingredients, purchase orders, recipes, RFQs, specifications, complaints, partner listings, practitioners, wholesale accounts, segments and quizzes. Press anywhere on a row and it opens underneath, without leaving the list or losing your filters.
Each panel shows what its columns can’t, rather than repeating them. A specification opens to its actual acceptance criteria — the column only showed how many there were. A segment opens to its membership rule, the one thing that tells two segments apart on that list, and warns you when a stored rule has stopped parsing and is quietly matching nobody. An RFQ opens to the lines you asked for and the bids you got back, cheapest first, with vendor names. A purchase order opens to whether the vendor invoice is paid, a separate question from whether the goods arrived.
Edit links and the buttons in the Actions column work exactly as before.
Wholesale tiers was looked at and deliberately left alone: that list already shows every field a tier has, so a panel would only repeat the row.
2026-08-09
Banner priority now explains what the number actually does. The Priority field on promotional banners was a bare number box, and the values merchants use — 10, 20, 30 — read like a length of time. They aren’t: priority is a ranking, and higher numbers come first.
Both the create and edit forms now say so directly, and the banners page explains what happens when several banners are active at once: a storefront that shows one banner at a time displays the highest priority, while a storefront with a rotating bar cycles through all of them in that order. Rotation speed is set by the storefront and isn’t configurable from the admin.
Jump from your live store straight to the right editor. Content now has a View site in edit mode button. It opens your storefront in a new tab and, for the next eight hours, puts a small edit link in the corner of every journal post, learn guide and product page you visit — each one going straight to that item’s editor here.
Only your browser sees it. Shoppers on the same pages see nothing different, and the link never appears for anyone who isn’t signed in.
Wide lists keep the item name in view while you scroll sideways. On a phone, wide lists like stock levels needed so much sideways scrolling that the product name left the screen before you reached the number you wanted, leaving a bare figure with nothing attached to it. The first column now stays in place while the rest of the table scrolls, so you can always see which item a value belongs to. This applies to stock levels, orders, customers, and subscriptions.
2026-08-08
A calmer sidebar you can collapse. The sidebar now answers one question at a time instead of showing eleven areas at equal weight.
Your pinned shortcuts sit in their own tinted block at the top, so they read as a group rather than as loose icons. The gold star that used to sit on each pinned icon is gone — it looked like an alert badge, and it shared a corner with the real one. That corner now only ever shows something that needs you.
The areas list underneath collapses. Click the “Areas” heading and everything folds down to the area you are currently in; click again to bring the rest back. It stays how you leave it, per store, and starts open.
The areas themselves are ordered by the kind of work they are: running the store first, building it second, with a line between the two. Integrations and Settings moved to their own small group at the bottom, out of the way but never hidden by the collapse.
The hint under the list now tells you what it is actually worth knowing: you can pin any row, Alt with the arrow keys reorders your pins, and Ctrl-K (Cmd-K on a Mac) jumps you anywhere without touching the sidebar at all.
A thinner scrollbar across admin. Scrollbars in the admin console are now a thin, quiet line instead of the wide system scrollbar — on the sidebar, the context panel, and every page that scrolls. It stays visible whenever there’s more to see; it just no longer looks like something the browser drew by accident.
Adjust stock on a whole selection at once. Select SKUs on the Stock levels list and apply the same change to all of them in one go — receive a pallet across five variants, or write off a damaged case across a dozen. You type the amount and the reason once, and each SKU gets its own ledger entry exactly as if you had adjusted it by hand. The per-row Adjust box and the CSV batch importer are unchanged.
It is a change, not a target: +24 moves every selected SKU up by 24 from wherever it is now. A reduction never takes stock below 0 — it stops there, records an oversell event, and the bar tells you which SKUs came up short and by how much. SKUs belonging to an archived product, and archived variants, are skipped rather than adjusted, and named so you know which.
Each SKU is saved on its own. If part of a batch fails, the ones that landed stay saved and only the failed SKUs remain selected, so running it again cannot count the same units twice.
Close a wave of failed payments with one reason. When a processor has a bad afternoon you get a screen full of declines that all happened for the same reason. Tick the ones you want and a bar appears at the bottom of the failed-payments list with a Mark resolved button.
The reason is still required — that has not changed and will not. What changed is that you type it once for the whole selection instead of once per row. The confirmation shows how many failures it covers and takes the note there, and the same wording is written to every one of them, one audit entry each, exactly as if you had closed them by hand.
Failures that were already resolved — auto-recovered by a later payment, or closed earlier — are skipped and reported, never quietly re-stamped. If part of a batch does not go through you are told which part, and the ones that succeeded stay resolved with your reason on them, so you can reselect just the stragglers.
Resolving still refunds nothing and re-charges nothing; it closes the failure and stops its dunning emails. The bar needs the same permission as the per-row Mark resolved button, and selections are capped at 100.
Marketing emails can no longer ship without an unsubscribe link. A follow-up to the unsubscribe fix. That change gave every marketing email a one-click opt-out; this one makes it impossible to lose again.
The opt-out was still optional on the abandoned-cart nudges and the back-in-stock notice — and being optional is exactly how these came to have no link at all. It is now required, so an email that cannot offer a way out is refused while the code is being written rather than in someone’s inbox.
Where a recipient genuinely cannot be given one — no customer record exists for the address — the email is suppressed rather than sent, recorded the same way as anyone who has not opted into marketing. In practice you will see no change: those recipients were already suppressed a step earlier, for the same reason.
Abandoned-cart nudges now resolve a guest checkout by email address first, so a returning customer who checked out as a guest still gets their nudge, and their unsubscribe link, instead of being dropped over a missing field.
Page builder list sorting now covers every page, not just the first 200. Sorting the Storefront › Page builder list by Slug, Title, Status, or Updated now ranks your entire set of pages, not just a capped window. Click a column header and the whole list reorders.
Prices in the thousands read correctly on two admin screens. Two screens formatted prices by hand instead of using the shared formatter, so a figure over a thousand lost its comma and a negative figure put the minus sign in the wrong place.
On the product Subscription tab, and on the operator subscribe-price backfill plan, a price of twelve hundred and thirty-four dollars fifty-six read as “$1234.56” rather than “$1,234.56”. Both now use the same formatter as the rest of the admin, so they group thousands and place a minus sign ahead of the symbol.
Nothing about the underlying prices changed — only how they are written. Blank prices still show a dash rather than a zero, which matters most on the backfill plan: “no subscribe price set” and “free” are different things.
See when your next Stripe payout lands, and how much. The Money dashboard has a new “Next payout” card. It answers what the board could not before: not what you earned, but when the money reaches your bank. Those are different numbers on different days — Stripe holds funds for a rolling window and pays out on your own schedule.
Once Stripe has scheduled the payout you get the exact amount, the exact arrival date, and the orders it is made of, each linking to that order. Transfers, adjustments and fees are listed too, so the lines add up to the total instead of quietly falling short. Before that you get an estimate, labelled as one, showing your available balance and the next date your schedule fires — with no order list, because Stripe has not decided yet what goes in.
Funds still clearing are never counted; they are not in the next payout. If you pay out manually, the card says so rather than inventing a date. If Stripe cannot be reached you get a short message on that card alone — never a zero, because “$0” and “we could not check” are not the same news.
Add it from the widget library, or start a dashboard from the Money preset.
Sidebar areas take you there in one click. Clicking an area in the sidebar — Commerce, Catalog, Marketing, and the rest — now takes you straight to that area’s main page, the same one-click landing that already worked for single-page areas like Compliance.
The browse panel still opens alongside it, so you land on a real page and see everything else in that area at the same time.
What needs you now sits at the top of the sidebar. The sidebar now opens with the one thing it was missing: a “Needs you” button above your pinned shortcuts, with a count of everything waiting on you.
Click it and the panel becomes your list — failed payments, orders to pack, low stock, returns to review — most urgent first, then largest first. Each row is a link straight into the filtered list that clears it, so you land on the work rather than on a page you still have to narrow down.
The count is the total across those rows, which makes it the one number in the sidebar that adds up. Everywhere else a heading only tells you that something underneath it needs attention, never how much, because summing a heading would double-count what its rows already show. Here the number and the list are the same thing.
The button never moves or disappears. When there is nothing waiting, the count goes away, the button stays, and the panel says so — worth being able to check on purpose.
It reads from the same place as the badges on the individual sidebar rows and the Action Required band on your dashboard, so the three can’t tell you different things.
Your money week, in one sentence. The Money dashboard now opens with a single line describing the week ahead — what lands and when, and the one other thing worth knowing.
“About $980.00 should land Fri, Aug 14, and 6 subscription renewals are due in the next 14 days.”
If an order has been flagged by the issuing bank, that becomes the sentence instead, and nothing else leads. It is the only thing on the board with a closing window: refunding before a dispute is filed costs you the order and nothing more.
Everything it says is already on the board underneath it. It never calculates a figure of its own, so it can’t disagree with the cards below. An estimated payout says “about”; a confirmed one doesn’t. Anything it can’t see — because you don’t have access, or because the reading failed — simply drops out of the sentence rather than showing you a zero. If there is genuinely nothing scheduled, it says so.
Add it from the widget library, or start a dashboard from the Money preset, where it now leads.
2026-08-07
Attribute a payment link to an open session. When you generate a QR payment link from New in-person order, you can now attribute it to an open session. The sale counts toward that session’s takings and toward the seller’s numbers once the customer pays. Leave it on “No session” for a standalone sale and nothing changes.
Approve or reject reviews in bulk. Select reviews in the moderation list and approve or reject the whole selection at once, instead of working through a pending queue one row at a time. The per-row Approve and Reject buttons are unchanged, and a review already in the status you picked is left alone rather than re-moderated.
Each review is saved on its own. If some rows in a batch fail, the ones that succeeded stay saved and the bar names the reviews that did not go through, so you can reselect just those and retry without re-applying the rest.
Draft and send a recall notice for a lot. Looking up a lot already told you which orders it went out on. Now you can act on that list: Orchard drafts a notice for each customer who received the lot, filled in from the order itself — lot number, product, order reference, the date it shipped, and what to do next.
Nothing sends on its own. Drafts open for you to read and edit, and a notice only goes out after you explicitly confirm it. There is no path that dispatches a customer-facing recall message without a person approving it first, which is deliberate — this is the one place where an automatic send would be worse than no feature at all.
Every notice that goes out is recorded: who was notified, when, and for which lot. That record is append-only, so it stays a true account of what you sent. Notices are treated as transactional rather than marketing, so they reach customers who have opted out of marketing email — a recall has to.
Take a guided tour of orders. The first time you open Orders, a short tour points out where to create an order and confirm checkout end to end. Replay it any time from Help, or jump straight to it from this entry.
Take a guided tour of shipping rates. The first time you open Shipping rates, a short tour points out where to add a tier and what enabling it does at checkout. Replay it any time from Help, or jump straight to it from this entry.
Take a guided tour of the page builder. The first time you open Page builder, a short tour points out where to compose and publish a page. Replay it any time from Help, or jump straight to it from this entry.
Jump from the audit log to a teammate’s profile. Names in the audit log are now clickable. Go straight from “who changed this?” to that teammate’s profile — their recent activity, their notes, their role and permissions — from either the Actor column or an entry’s detail panel. Platform support staff still show by name but aren’t links, since they aren’t members of your team.
Jump straight to an order by typing its number. Type a full order number, a customer’s full email, or a record ID into the command palette (Cmd-K, or the Search row in the sidebar) and it pins a single “Jump to” row at the top, already highlighted. Press Enter and you are there. It runs as its own lookup, so it lands without waiting on the general search.
If search itself cannot be reached, the palette now says “Search is unavailable” rather than “No results” — those looked identical before, so an outage read as a verdict on your catalog. Pages and quick actions keep working either way.
On a phone the palette is a full-height sheet with the search box pinned and its own Close button, instead of a narrow card with nowhere to tap to dismiss it. Opening it from the mobile menu now closes that menu behind it.
One thing will look like a loss and is not: team members without permission to view subscriptions no longer see subscription results. Those rows used to appear for anyone who could read orders, and clicking one led to a permission error — the row was advertising a record its owner could not open. Grant subscription access if someone needs them back.
Let customers choose how often they reorder. A subscription can now be billed yearly, alongside monthly and every three months. The schedule you set on a product becomes the option your customer sees selected first rather than the only one available — they pick at checkout, and their choice is what gets billed.
The price is per order and does not change with the schedule. A $120 subscription is $120 every time it ships: twelve times a year on monthly, four on quarterly, once on yearly. Yearly is a smaller commitment at the same price per box, not a discounted bulk purchase — one charge, one shipment. Worth saying plainly on your product pages, because customers will read “yearly” both ways.
Before offering yearly on a product, check that fulfilment ships it once. Nothing here changes what gets packed, only what Stripe charges and when.
Building against the API? subscription_interval accepts year as well as
month and quarter, and stays the first of the three places a schedule is
read from. Yearly maps to a Stripe annual price with no interval count.
Existing subscriptions keep the schedule they were created with.
Column sorting now covers your whole list, not just the page you’re on. Sorting the Content, Customers, Orders, Subscriptions, and Products lists by a column header now ranks your entire list, not just the rows currently on screen. Click a header and the whole set reorders — no need to filter down first to find the true highest or lowest values.
One exception: on Products, sorting by “Waiting” (back-in-stock signups) still only reorders the current page.
Move a batch of orders in one go. Tick the orders you want and a bar appears at the bottom of the list with two actions: advance fulfillment, and cancel.
Advancing moves each selected order one stage along its own timeline — pending becomes processing, shipped becomes in transit. Orders already at the end, and ones that were cancelled or refunded, are left alone, so a wide selection can’t send a shipping confirmation for a sale that is over.
Cancelling asks first. The confirmation says how many orders it covers and repeats the two things that matter: it returns the items to inventory, and it does not refund anyone. If any were paid, you still owe each customer a refund from its own order page.
When part of a batch doesn’t go through you’re told which part — “7 cancelled · 5 failed (#1043, #1044, #1051 +2 more)” — and the ones that succeeded stay succeeded. Reselect just the failures and retry without double-applying.
Every order in a batch gets its own audit-log entry, the same as acting on it by hand. The buttons follow the access you already have: advancing needs the same permission as the per-order advance, cancelling the same as the per-order cancel. Selections are capped at 100.
Nudge a customer whose supply is running low. Every row on Commerce > Customers > Replenishment now has a Nudge button. It opens a short message about that product, addressed to that customer, with their last order date and quantity already filled in. You read it, and you send it. One customer, one product, one click.
Pick either a plain restock reminder or the same reminder with an invitation to set up a repeating order. Both link to the product page; neither creates a subscription on anyone’s behalf.
You cannot edit the wording. Anything a supplement brand says about a product carries FDA and FTC weight, and a message we wrote and you sent is a claim we both made — so the wording is fixed, makes no claim about what the product does, and is checked against a list of disease-claim language on every build. If your product’s own name contains something like “cure”, the send is refused and we tell you which word stopped it.
The button will not email someone who has not opted in to marketing, and will not email the same person about the same product twice for one order. Buy again, and they become eligible again.
Sending needs permission to edit customers.
Open the admin on the venue you sell at. Your Home can now be a venue, not just a page — and it lands on whatever is actually open there today.
Saving the sell screen itself would not have worked. Its address belongs to one session, and a market that runs every Saturday creates a new session each week, so the link you saved on one Saturday is dead on the next. Pick the venue instead and we look up the live session every time you open the admin.
What you land on:
- One session open at that venue — straight onto its sell screen. No dashboard, no menus, no taps.
- Nothing open — the venue, with its sessions and a way to start a new one.
- More than one open — the venue, listing them, so you choose. We will not guess: picking the wrong one would attribute the sale to the wrong session, and you would not find out until close-out.
Set it from the venue page — “Make this my Home” — or from Settings, then Your preferences, where venues now appear in the picker alongside pages.
If the venue is archived, or you lose access to in-person selling, you land on the dashboard and get told which venue you lost, with a one-click reset.
Open the admin where you actually work. Pick the page the admin opens on, and you land there instead of the dashboard.
If your job on a given store is one screen — taking orders, checking stock, running a market stall — the dashboard is a slow detour you pay for on every open. Set that screen as your Home and it becomes the first thing you see, on a phone at a stall as much as at a desk.
Two ways to set it: the quick actions button on any page that can be a Home, or Settings, then Your preferences. Both show the name of what you saved.
Your Home is yours alone and it is per store — the same person can open one store on its orders screen and another on its dashboard.
Links still go where they point. A link from an email to an order opens that order, exactly as before; Home applies only when you open the admin without asking for anywhere in particular. The store name at the top of the menu always takes you back to the dashboard.
If your Home stops being available, you land on the dashboard and get told why, with a one-click reset.
Product tiles confirm your tap when you sell in person. Tapping a product on the in-person sell screen now visibly responds: the tile darkens and dips under your finger, and a count appears in its corner showing how many of that product are in the cart.
Before, those tiles only had a hover effect. Hover does not exist on a touchscreen, so on the phone or tablet you actually sell from, a tap produced no visible change. The one number that moved was the “left” count at the bottom edge, which counts down — easy to miss, and it reads as stock draining rather than as confirmation.
The practical cost was over-adding. With nothing confirming the first tap, it was reasonable to tap again and ring up more than the customer asked for. The count that now grows is the one you were already thinking about.
Devices that support it also vibrate briefly on each tap. Those that do not, including iPhones, simply do not buzz — the visual response is the same everywhere.
With reduced motion enabled, the tile still darkens; only the dip is skipped.
Stock limits are unchanged: a tile stops accepting taps once the cart holds everything on hand.
Search is now on every page. Every admin page now has a search box in the top bar. It searches your orders, customers, products, subscriptions, content and returns, and jumps straight to a record when you paste a full order number, email or ID. On a phone it is the magnifying glass beside the menu. The keyboard shortcut still works exactly as before.
See where your visitors are, not just your orders. The map on your dashboard now has a second layer. Switch it from Revenue to Traffic and the same states fill in by the visitors who browsed from them, counted as sessions (people) or events (pages opened). Clicking a state still zooms in, and switching layers keeps whatever you were looking at.
The two layers answer different questions and are deliberately kept apart. Revenue is the state a parcel shipped to, which the customer told you. Traffic is worked out from the visitor’s IP address, which is an estimate — a phone can be placed in the wrong city and someone on a VPN can look like a datacenter — so the traffic layer says so on screen.
Nothing is quietly dropped. Visitors outside the US are counted and reported under the map, as are visitors whose location could not be worked out at all; those are two different things and are shown as two different numbers.
See which cities inside a state. Click a state on the Revenue by state map and you now get a ranked list of its cities underneath the state totals — for whichever layer you are looking at. On Revenue that is where the orders shipped; on Traffic it is where the visitors appeared to be.
The state’s own numbers stay on screen. The list is the depth, not a different view, and switching layers re-ranks the cities without reloading anything.
Two lines under the list keep it honest. Only the top five cities are shown, so if a state has more you get the count and the total of the rest — the cities on screen are not meant to add up to the state figure above them. Separately, activity with no city recorded is stated on its own line rather than quietly folded in or dropped. That is common on Traffic, where the edge often resolves a state but not a city, and on older orders placed before the city had its own field.
A state with nothing at city grain says so, rather than showing an empty list. Cities are matched case-insensitively, so “portland” and “Portland” are one row.
Visitor locations are approximate — they come from IP address, not a shipping address — and the caveat stays visible while you are drilled in.
See which customers are about to run out. If you have told Orchard roughly how long a product lasts, it can now work out when each customer is likely to finish theirs. A new Replenishment page lists the people approaching that point, and a dashboard widget shows the short version.
It is a list, not a campaign. Nothing is sent, and no message goes out on the back of it — the page tells you who to think about, and what you do next is up to you.
The list is deliberately quiet. Someone who already reordered drops off. So does someone who is on a subscription for the same product, someone you sold to at a clinic or event rather than online, and anyone you have already been shown recently. Where the estimate is missing or unreliable, the customer is left out rather than guessed at — a shorter, trustworthy list beats a long one you learn to ignore.
Three settings under Settings tune it: when to start suggesting someone, how far past the estimate to give up on them, and how many rows you are willing to see at once.
Set up two-factor on a new phone without turning it off first. Setting up two-factor again when you already had it switched on did not work. The QR code appeared and your authenticator app accepted it, but every code it produced afterwards was rejected. The only way to move two-factor to a new phone was to switch it off entirely first, leaving your account on a password alone until you finished.
That is fixed. Scanning the new QR code and entering a code from it now completes, and the new authenticator becomes the one your account uses.
Your existing authenticator keeps working the whole time you are setting the new one up. Nothing changes until you enter a code proving the new one works, so an abandoned setup or a closed tab leaves you exactly as you were. Once the new one is live, devices you had told us to remember are asked for a code again — as already happened whenever your second factor changed.
If you leave a setup open long enough that it is no longer current, entering a code now tells you to start again and get a fresh QR code, rather than saying the code was wrong.
Sign in with Microsoft or Apple. Microsoft and Apple now join Google as ways to sign in to your Orchard profile. Everything that was true of Google is true of these too: password sign-in is unchanged and always available, and this is an extra way in rather than a replacement.
You connect an account from inside your own profile, the same place Google lives. Signing in with an account that has never been connected does not create an Orchard account and does not match you by email address — it is refused, and you are told to sign in with your password and connect it first. Apple is worth one note: if you choose to hide your email address, Apple gives us a private relay address instead. That address is only ever a label on the connection, so hiding it changes nothing about how sign-in works.
Your two-factor code is still required afterwards, exactly as with a password. Repeated failed sign-in attempts through any connected provider are now slowed down the same way repeated password attempts already were.
Sort and search all your formulations, not just the newest 500. Sorting a column on the formulations list now orders every formulation you have. Searching does the same.
Before, the page loaded your 500 most recent formulations and then sorted and searched within that batch. Clicking “Formulation” gave you the alphabetically-first of those 500 — not the alphabetically-first recipe you own. If you had fewer than 500 the two were the same thing, which is why this could go unnoticed; past 500 they quietly diverged, and a search could miss a formulation that was simply older than the cut-off.
The list is now paged rather than capped, so you can move through the whole set instead of seeing the first 500 and a note explaining what you were missing. That note is gone, because there is nothing left to disclose.
Links you have already saved keep working — the sort and search parts of the address are unchanged.
Batch creation is unaffected: the formulation picker there still offers your full current set, as it always did.
Subscriptions bill on the schedule you set. Orchard no longer picks a billing frequency for you. If a subscription reaches checkout without a schedule — none on the line, none on the variant, none on the product — the checkout is refused instead of quietly defaulting to monthly.
A guess about billing frequency is a guess about someone’s card. A storefront could advertise a seasonal subscription while the checkout underneath set up monthly billing, and nothing flagged the disagreement. That had happened on one store: the product pages promised a shipment each season and every checkout would have charged twelve times a year. No customer was affected — that store had no subscriptions yet — which is the only reason this reads as a fix rather than an apology.
Set the schedule on the product, or on the variant if sizes differ. Quarterly bills as every three months; Stripe has no separate quarterly setting, so that is the same thing in Stripe’s terms.
Building against the API directly? subscription_interval is now documented on
the checkout request, and a subscription line with no resolvable schedule
returns subscription_interval_unresolved.
One-time purchases are untouched.
Tag or untag a batch of customers. Tick the customers you want on the customers list and a bar appears at the bottom with a tag field and two buttons: Tag and Untag. Type a tag once and apply or remove it across the whole selection instead of opening each customer’s profile.
Tagging and untagging are both safe to repeat — applying a tag a customer already has, or removing one it never had, changes nothing. The per-customer tag controls on the profile page are unchanged. Selections are capped at 100.
When part of a batch doesn’t go through you’re told which part, and the customers that did succeed stay tagged (or untagged) — reselect just the failures to retry.
The manual order product picker responds to a tap. Tapping a product in the “Add product” results on the manual in-person order screen now darkens that row while your finger is down.
Before, those rows only had a hover effect, and hover does not exist on a touchscreen — so on a phone or tablet a tap produced no visible change and you could not tell it had registered. Both levels are covered: the product row, and the size or variant rows underneath a product that has them.
This is the same fix already made to the product tiles on the market sell screen, applied to the other place you build an order by hand.
2026-08-06
Estimate when a customer will run out. Each variant can now carry a “Typical days of supply” — how long one unit lasts a customer at normal use. From that and what someone actually bought, the admin estimates when they will run out.
The field is optional and blank means no estimate. That is deliberate: a variant with no figure entered produces no run-out date at all, rather than a guessed one. A wrong date here would be worse than none, because it would be acted on.
Enter it on the variant, alongside price and stock.
Zero out shipping with a promo code. Promo codes can now remove the shipping charge entirely, alongside the existing percent-off, fixed-amount, and free-gift types. Give customers a code and their shipping cost drops to $0 at checkout.
Usage limits, an active date window, and a per-customer cap all work the same as any other promo code. One tradeoff: while a free-shipping code is applied, the customer chooses from a single $0 shipping option rather than their usual carrier choices.
Know when a bank flags an order as fraud, before it becomes a dispute. When a cardholder’s bank reports a charge as fraudulent, Stripe tells you well before any dispute is filed. Until now that notice went to your Stripe email and nowhere else, so the cheap window — refunding the order and avoiding the dispute fee entirely — often closed before anyone noticed.
Those warnings now arrive in the admin. You get an alert in your notifications, a count in Action Required, and a banner at the top of the Payment section on the flagged order, naming the amount and the reason the bank gave. From there the existing refund control is one card away.
Nothing is refunded automatically. The warning tells you a decision is worth making and takes you to where you make it; whether to refund stays entirely yours. If a warning stops being actionable — a dispute arrives, or you refund the order — it clears itself from your count.
One setup step, and it is required. In your Stripe dashboard, open the webhook endpoint for your store and enable the two early fraud warning events, in both test and live mode. Until you do, Stripe has nothing to send and the alerts will not appear.
New vs returning chart is now fully keyboard and screen-reader accessible. The New vs returning dashboard widget’s legend is now a real keyboard control — tab to a segment and press Enter or Space to select it, and its count, share and revenue are read aloud by a screen reader, the same treatment the Distribution widget introduced. A hidden data table backs the chart for assistive technology too, so the figures are never trapped in a hover tooltip.
Refunds stop asking you to re-authenticate every few minutes. Issuing a refund used to require a fresh two-factor confirmation if your last one was more than five minutes old, so working through a batch of refunds meant re-entering a code over and over. The window is now twelve hours — still well inside a working session, and still short enough that a refund cannot be issued from a session you left open days ago.
The refusal you see when a refund is blocked now tells you which problem you actually have. Previously an admin with no authenticator set up was asked to “verify a code”, which is impossible to satisfy — there was nothing to verify against. That case now says to enrol a second factor on your profile and links you there, and only an admin who genuinely has one is asked for a code.
Every other action that asks for a second factor is unchanged and still uses the short window.
Require a lot before an order ships. You can now ask Orchard to insist on a lot before an order is marked shipped. Turn it on in Settings → Fulfillment → Lot traceability. It is off until you switch it on, and it is per store — nothing changes for anyone who leaves it alone.
With it on, advancing an order to shipped, in transit, awaiting pickup or delivered is refused while any line still has no lot recorded, and the message names the lines so you know exactly what to fix. Assigning them is one click from the order — the suggestion shipped last week assigns every unassigned line at once.
It only ever holds up lines it can actually help with. A line counts as lot-tracked once you have recorded at least one batch for that variant, so products you don’t batch never block an order, and neither does an order that has already shipped — there is nothing left to record by then.
This is about the quality of your own records. If you ever need to look up who received a given lot, that answer is only as good as the assignments behind it, and an empty result reads exactly like a lot that never shipped.
See how your numbers break down, not just their total. A new dashboard widget shows a total split into its parts rather than as one number. Pick what to break it down by — revenue or units sold across your products, or how your variants sit across in stock, low stock and out of stock. A long tail is gathered into a single grouped slice so the shape stays readable.
Selecting a slice takes you to the rows behind it, so a breakdown is a starting point for a question rather than the end of one.
The legend is the control, not the chart itself. That means every slice can be reached and selected from the keyboard and read aloud by a screen reader — the figures are not trapped in a hover tooltip.
Add it from the widget picker like any other dashboard widget.
See what a lot recall lookup can and cannot check. A lot recall lookup now tells you how much of your order history it was able to check. Alongside the orders it found, it reports how many shipped order lines for that same product carry no lot number at all, over the last 12 months.
That matters most when the lookup finds nothing. An empty result used to look identical whether the lot genuinely never shipped, or whether no line for that product had a lot recorded in the first place. Those two answers now read differently, so an empty table is never mistaken for a clean one.
If the lot number you searched has no batch record behind it, the lookup says so instead of reporting a zero it cannot stand behind.
Batch rows also link straight to the lookup for their own lot, so finding the affected orders no longer means copying a lot number into a search box. The link appears only for people who can already view orders.
See which orders Stripe flagged as risky, and clear warnings you’ve handled. Stripe rates the fraud risk of every online card payment it screens, and Orchard now keeps that rating. On the orders list, a risky order carries a short label next to its number — “Elevated risk” or “High risk”. Ordinary orders carry nothing: a badge on every row is noise, and noise is how the one that matters gets missed.
The order page says more, including when Stripe never looked. It does not screen payments taken in person on a reader, or subscription renewals after the first — so “no rating” is often simply how it is, not a gap in your data.
You can also clear a fraud warning yourself now. Previously one went away only when Stripe decided it had, so a false alarm sat in Action Required forever — and a permanent alert is one you stop reading. The banner on a flagged order now lets you mark it refunded or dismiss it, recording who made the call. Neither moves money; refunds still happen only in the Refunds card. Clearing a warning needs the same permission as issuing a refund, since it is the same decision.
Setup: in your Stripe dashboard, enable charge.succeeded on your store’s
webhook endpoint, in both test and live mode. Until you do, orders show no rating.
Sign in with Google. You can now connect a Google account to your Orchard profile and use it to sign in instead of typing your password every time. Password sign-in is unchanged and always available — this is an extra way in, not a replacement.
Connecting is something you do from inside your own account. Open your profile, choose Connect Google, and confirm with Google. Signing in with a Google account that has never been connected does not create an account and does not match you by email address — it is refused, with a note telling you to sign in with your password and connect it first. That is deliberate: matching on an email address would mean anyone who controls a mailbox could reach the account behind it.
Your two-factor code is still required. Google gets you past the first step only, exactly as your password does, and you are asked for your authenticator afterwards as usual. Disconnecting lives in the same place, and Orchard refuses to disconnect your last remaining way to sign in.
Suggest the right lot when you pack an order. Order lines can now be matched to a specific batch at pack time, and the admin suggests which one to use: the batch that expires soonest and is actually available to sell. One action assigns the suggestion to every unassigned line on the order, and you can override any individual line before saving.
This is what turns your batch records into traceability. Once a lot is recorded against an order line, you can answer the question that matters if a batch is ever recalled — which orders contained it, and who received them.
Nothing is assigned automatically. The suggestion is a starting point you confirm, so an order never ships against a lot you did not choose.
2026-08-05
Edit long-form product page copy in the product form. The long-form copy that fills out a product page is now editable in the product form, next to everything else about the product. Previously these fields could only be changed in the database.
Five fields are covered: a short “How to use”, the “Base” line that appears on the product page, and the three tab bodies — the formula, the detailed how-to-use, and the tradition behind the product.
Each is a plain text area. Leave one blank and its tab simply does not render on the storefront, so you can fill them in as the copy is ready rather than all at once.
See where your visitors actually came from. Storefront analytics now record where each visitor arrived from — source, medium, campaign, the specific ad content and search term, and the page they landed on. The traffic breakdown in your reports reflects real visitors rather than collapsing to “(direct)”.
Attribution is first-touch: the source that brought someone to the store is the one credited when they later check out, so a customer who arrives from a campaign and returns directly a day later is still counted against that campaign.
For integrators, the same fields are accepted on the analytics events and checkout session endpoints, and server-side callers can forward a visitor’s original attribution instead of having it recorded as traffic from your own server.
Send a payment link from the market sell screen. Selling in person no longer means the buyer has to be standing at your reader. The sell screen now offers “Scan or send to pay” alongside the existing tender options: show the QR code for someone at the stall, or send the same link to a customer who wants to pay from their own phone.
The link carries the real cart. Discounts you applied on the sell screen travel with it rather than being silently dropped at payment, and the stock behind each line is held on the same terms as any other sale, so a link that is paid ten minutes later cannot oversell a variant that ran out in the meantime.
When payment lands, the screen advances on its own — you can email a receipt and start the next sale without leaving the register.
2026-08-01
See which products shoppers are waiting for. The products list has a new Waiting column showing how many people asked to be notified when each product is back, so you can sort the catalog by demand and see what to make next.
Open a product to get the full picture: how many are still waiting, how many have already been emailed, and a breakdown by variant — useful when sizes sell out at different rates. If you have permission to view customers, you can also see the individual email addresses and when each person signed up.
Shippo and EasyPost now refuse a key from the wrong environment. Installing Shippo or EasyPost from the connectors marketplace checked only that the key had a recognised prefix, not whether that prefix matched the environment being installed. A test key pasted there was stored as your live shipping credentials.
Little told you afterwards. The connection test passes either way — a test key
authenticates fine against the provider’s test environment — and the key is
encrypted on save and never shown again. The clearest signal was the “Account”
line on the connected card, which shows the key kind: test for Shippo, EZTK
for EasyPost. The install’s audit entry recorded it beside the environment.
For EasyPost this had a practical cost: rate quotes and label purchases use that key, so a live install returned test-environment rates and labels that are not real postage. For Shippo the credential is not yet read by any shipping path, so the effect was a connector bound to the wrong account.
A key whose prefix disagrees with the environment is now refused, with a message
naming both. Nothing is stored. If you installed either connector earlier, check
its “Account” line — if it reads test or EZTK on a live store, re-install
with your live key.
Stock changes reach your storefront right away. When you adjusted stock in the admin, your storefront could keep showing the old numbers for several minutes — and on a quiet store it was worse than that, because the cached page was only rebuilt once someone asked for it, so the next visitor after the wait still saw the stale count and only then triggered the refresh.
Adjusting stock, editing a quantity inline on the inventory list, or resolving an oversell now tells your storefront to drop its cached product data immediately, so the next visitor sees the real number. A store that sells its last unit stops advertising it within seconds instead of minutes.
This applies to storefronts running on the fork template once their address is registered with the platform; nothing changes for a store that has not been connected yet.
Storefront settings now say when they apply to your store. The SEO, Robots, Static pages and Legal screens under Storefront settings are read by Orchard’s built-in storefront. If your store runs its own storefront project instead, or a custom app built on Orchard’s API, those screens never reached your live site — and nothing on them said so, so four empty forms looked like setup you had forgotten to finish.
Each of those screens now explains, above the form, which storefront serves your store and whether saving there will change what shoppers see. If we do not yet have that on record for your store, the screens say that too, rather than leaving you to guess. Once a store is recorded as using Orchard’s built-in storefront the note disappears, and those settings work exactly as before.
Saving is still safe either way. Values you enter are stored, so a store that later moves onto Orchard’s built-in storefront finds them already filled in.
Stripe keys can no longer be saved to the wrong environment. The Stripe settings form no longer starts with Test pre-selected. You now pick Test or Live deliberately, and saving to Live asks you to confirm first — a secret key is encrypted the moment it is saved and can never be shown again, so a mis-filed key previously meant expiring it at Stripe and starting over.
If a key’s own prefix disagrees with the environment you picked — a live
sk_live_ key while Test is selected, or the reverse — the save is now refused
outright with a message telling you which is which. Nothing is stored.
Saving credentials also no longer clears your registered card readers. The Terminal location and reader list were being wiped whenever Stripe credentials were updated, including during a webhook-secret rotation; both now leave the reader roster untouched.
Stripe Tax now refuses a key from the wrong environment. Installing Stripe Tax from the connectors marketplace accepted any key beginning
sk_ or rk_ without checking whether the key’s own prefix matched the
environment being installed. A test key pasted there was stored as your live
Stripe Tax credentials.
Nothing told you. The connection test asks Stripe for your Tax settings, and a test key answers that question perfectly well — against the test account. So the install went green while bound to the wrong Stripe account, and because a secret key is encrypted the moment it is saved and only its last four characters are ever shown again, there was no way to check afterwards which account it came from.
A key whose prefix disagrees with the environment is now refused outright, with a message naming both. Nothing is stored.
Subscription plans now name the product they bill. Store-wide subscription plans set the billing rules for one recurring price. The screen listing them identified each plan only by its Stripe price ID, so a store with a dozen plans showed a dozen near-identical cards and no way to tell which governed which product without opening Stripe.
Each plan now leads with the product and size its price charges, and what it charges — “Lemon Balm Elixir — 4 oz, $50.00 / month”. The price ID is still shown underneath for anyone reconciling against Stripe. The full rule grid moved behind a one-line summary that reads “Standard policy” when a plan uses the defaults, so the plans you have customized stand out.
Plans whose price we cannot match to a product still appear, clearly marked, rather than being hidden. A plan whose price has since been replaced by a newer one is marked too, and still names its product. If a plan’s billing schedule disagrees with what its Stripe price actually charges, the row now says so.
The list gained a search box and a product filter, and Subscription plans now appears in the Settings section of the sidebar — previously it was reachable only from the Settings home page or a product’s Subscription tab.
2026-07-31
Get an email when a new order comes in. Turn on Email for “New order placed” under Settings › Notifications and you’ll get a message with the order number, total, and customer each time an order is paid. It’s off until you switch it on, each team member chooses for themselves, and turning email off keeps the in-app bell.
Forked storefronts now ship legal pages, static pages, and a robots policy. A storefront built from the fork template used to launch with no privacy
policy, no terms, and no robots file — every store hand-built them or went
without. It now ships /privacy, /terms, /cookies, /accessibility,
/about, /faq, /contact, /sustainability, /robots.txt, and
/sitemap.xml, all linked from the footer.
The copy comes from what you write in Storefront › Settings, so updating a policy is one edit in the admin rather than a code change in your store’s repository. Anything you haven’t written yet falls back to clearly-marked placeholder text, so nothing 404s before launch.
The robots file allows answer engines like ChatGPT and Perplexity to cite your products while blocking crawlers that only harvest training data.
2026-07-28
Back-in-stock signups name retired variants correctly. Posting a back-in-stock signup for a retired variant now answers
variant_archived with a short explanation, instead of
variant_not_for_product. Both are still refusals — a retired variant is
never restocked — but the old code described a variant/product mismatch
that was not the actual problem. The back-in-stock endpoint and the
corrected ProductVariant fields are now in the API reference.
A dashboard for the session you are running. Five new dashboard widgets report on the market or clinic session you have open right now: which session it is and one tap into its sell screen, the sales it has taken, how they were paid split into cash, card and by-hand, what stock is packed out against what is left, and what is still outstanding before you can close it out. A new Live session starting point puts all five on one board, ordered to read top-to-bottom on a phone.
Each widget knows the difference between a market and a clinic. At a market the stock left over has to be returned or written off before the session reconciles; at a clinic it stays on the shelf and becomes the next session’s opening position, and the widgets say so.
Quick sale asks which venue when more than one is open. Now that a clinic can hold stock between sessions, Quick sale asks where you are selling whenever more than one venue is open — so the sale lands against the right stock location, close-out and reports. Your clinic sits at the top of the list showing the day its books close, rather than a period start date that would read as stale, and the venue you picked last time is remembered on that device and floated to the front. With one venue open, or none, nothing changes: you still go straight to the sell screen or the in-person sale form.
Storefront settings now open straight from the sidebar. SEO & banner, robots policy, static pages, and legal pages each have their own
entry under Storefront › Settings, so you can jump to one directly instead
of opening the settings page and picking from a list. They also turn up in
search (Cmd/Ctrl + K) and carry a full breadcrumb trail.
2026-07-27
New dashboards start from a task, not a job title. Creating a dashboard now offers three boards built around what you are actually doing: Start of day (the queue, today’s numbers, what’s running low), Money (the weekly revenue, refund and subscription review) and Stock & catalog (what’s out, what’s low, what sells). The Operations, Marketing and Executive starting points are still there for stores where different people own different areas; the Finance starting point is gone, and everything it showed is now on Money. Every board is ordered to read top-to-bottom on a phone.
Markets is now In-Person. The Markets section is now In-Person, because the same tools cover a clinic or a popup as well as a farmers market. Series is now Venues — it always held the address, schedule and cost defaults for a place you sell — and the dated instances you open and close out are now Sessions. Nothing moved: the same links, pins and permissions still work.
Pack out for a market without leaving the sell screen. Opening Quick Sale on a market event that has no stock yet now gives you the pack-out picker right there: search your products, tap the quantities you brought, and pack out in one go. Stock moves from the warehouse (or a market kit) to the event as a single transfer, exactly as it does from the event page, and the till reloads ready to sell.
Sell in person from a clinic or any standing shelf. In-Person venues now come in shapes. A clinic keeps its stock on the shelf between sessions instead of packing it home: a session runs over a period (a week by default), you can restock from the warehouse at any time while it is open, and close-out counts the cash and the shelf without asking you to empty it. Markets and popups work exactly as before.
2026-07-23
Change a subscribe price without touching existing subscribers. You can now set or change a variant’s subscribe price right from the product’s Subscription tab. Changing a price never re-bills anyone: existing subscribers keep the price they signed up at, and only new subscriptions get the new one — the form says so before you save. Behind the scenes each subscribe price is now a real, persisted Stripe price, so the number shown on your storefront and the number charged at checkout are one and the same, and the “save X%” callout is computed from the actual prices instead of a hard-coded guess.
A clearer market close-out with a money summary. Closing out a market event now opens with an event summary — revenue by card and cash, units sold, costs, and net — so you can see how the day went at a glance. Each stock-return row shows the product’s name, photo, and SKU (no more two identical “16 oz” rows), and checks itself as you type: it turns green when every unit has a home and tells you exactly what’s left to account for. Cash shows a live variance as you count. Confirm stays disabled until everything balances, and if something still can’t be saved the message names the product in plain language instead of showing a raw error.
Jump from stock levels to the market holding it. On Stock levels, the note showing stock held at a market (for example “+4 West Linn Wednesday”) is now a link straight to that event, so you can open it and close it out to release the stock. A negative Available figure is now flagged and explained on hover — it means pending orders reserve more than is on hand, and stock held at a market is counted as its own location, not here.
See past market events and cancel empty ones. The Markets page now shows a Past section alongside Upcoming, so closed, reconciled, and earlier events stay reachable — including any that are still open and holding event stock, which you can close out from there. Today’s events also stay on the list through the evening now that the day is read in your store’s timezone. You can also cancel an empty scheduled event (one with no stock packed out and no sales) to clear an accidental duplicate; it moves to your history as canceled rather than disappearing.
2026-07-22
Announce products before launch with Coming soon. Set a product’s status to Coming soon to show it on your storefront
before it can be bought: it appears in the shop grid and search with a
Coming soon badge, its page renders without a buy button, and shoppers
can join a notify-me waitlist. When you make the product active, everyone
on the waitlist is emailed automatically. The public products API returns
these products with status: "coming_soon".
Run the store from the dashboard. Three new dashboard widgets close out the operate-from-the-dashboard set, so the daily routine happens where you already are. Store controls flips real settings by scope — web storefront, POS, or subscriptions — with the same confirmations the settings pages use on anything risky, like maintenance mode. Activity log brings your audit trail onto the dashboard, with your own choice of columns and filters for time window, severity, and source. Storefront navigator lists your pages with their publish state and jumps straight into the page editor. Add any of them from the widget library; each one respects the same permissions as the page it mirrors.
See every product’s subscribe price at a glance. The Subscription tab on a product now shows that product’s own subscribe pricing, variant by variant: the subscribe price your storefront charges today, the discount it saves against the one-time price, and the billing policy in effect. A health line at the top tells you how many variants are wired to a subscribe price, so “is this connected?” is answered on sight. Store-wide billing rules — trials, quantity limits, pause and skip — now live in their own home under Settings → Subscription plans.
Skip a subscriber’s next shipment from the admin. Skip a customer’s next subscription shipment right from the subscription’s detail page — handy when they call in to say they’re travelling or have too much on hand. The customer isn’t charged for the skipped cycle, and the subscription’s next billing date moves out automatically.
Product prices now show your default variant’s price. When a product’s default variant sets its own price, that price is now the one shown on storefront listing and product pages and in the admin product list and header — instead of the base product price. Checkout was already charging the correct variant price; this brings the displayed price in line.
Team member profiles and clickable @mentions. Every @mention is now a link. Click a mentioned teammate — in a note, in the Recent notes dashboard widget, or on the team list — to open their profile: a read-only view of their recent activity, the notes they’ve written or been mentioned in, their role and permissions, and when they last signed in. Writing a note is faster too: type @ right in the note box to pick a teammate or role without leaving the keyboard.
2026-07-21
The admin adapts to your phone. Action buttons on admin pages now adapt to narrow screens instead of overflowing off the edge. On a phone, secondary actions tuck into a tidy “more actions” menu while the main button keeps its label — so headers like inventory, the dashboard controls, and order details stay on one clean line you can actually reach, instead of wrapping into a stack that ran off-screen.
Archive a customer. Archive a customer from their profile to take them off your default customers list while keeping their record and full order history. Archived customers are still reachable by their direct link, and you can tell at a glance from the new Archived badge on the profile.
Adjust a chart’s comparison without editing the dashboard. Open the settings gear on the revenue trend chart — in the normal dashboard view, and on mobile — to switch its comparison baseline (previous period, same period last year, target pace, or run-rate projection) or its time range, without switching the whole dashboard into edit mode.
Add your own ingredient units. Ingredients, purchase orders, and recipes now draw from a unit list you control in Settings → Ingredient units. Every store starts with the standard weights and volumes plus common bulk containers — drum, case, pallet, sack, and more — and you can add your own. Recipe and formulation amounts stay limited to measurement units; purchase units accept containers too, so you can buy by the drum and still measure by the gram.
Compare KPIs against target pace and run rate. Dashboard charts can now compare against two new baselines. “Target pace” measures a to-date window against your metric target, pro-rated to how far you are through the period — so a month-to-date revenue chart shows whether you’re ahead of or behind where the target says you should be. “Run-rate projection” compares the window against your trailing 30-day pace. Pick either from the compare menu on any revenue or orders chart.
A sharper, more interactive dashboard. Drag across the revenue trend to zoom into any stretch of days, and press Escape or double-click to zoom back out — and clustered promo markers now fold into a single tidy chip instead of overprinting each other. The revenue-by-state map now always shows Alaska and Hawaii, and you can scroll, pinch, or use the +/− controls to zoom in on the smallest states, drag to move around, and press Escape or double-click to reset. Busy action lists wrap and cap with a “view all” link, and your dashboard greeting now welcomes you by name.
A guided start for new stores. New stores now open onto a getting-started checklist that tracks your path to your first sale — add a product, connect Stripe, set up shipping, publish your storefront, and place a test order — and ticks each step off on its own as you finish it. Short guided tours introduce the dashboard and your product catalog on your first visit, and you can replay any tour any time from the Help area.
Get emailed when a teammate @mentions you in a note. When a teammate @mentions you in a note, you now also get an email that links straight to the note — so you don’t miss it when you’re away from the admin. Each person can turn these emails off under Settings › Notifications and still keep the in-app bell.
Downloads no longer leave the installed mobile app. Exporting a CSV or PDF from the admin added to your home screen on a phone now downloads the file in place instead of navigating away to it — so you stay on the page you were working on rather than getting stuck on a file preview with no way back.
Notes and @mentions on orders, customers, and products. Add internal notes to any order, customer, or product, and @mention a teammate or a whole role to notify them — the notification links straight back to the note. You have 15 minutes to fix a note in place; after that, edits are kept as a visible history and deletes leave a “deleted” marker, so notes on your records stay trustworthy.
Recent notes on your dashboard, plus file attachments on notes. A new Recent notes dashboard widget surfaces the latest internal notes across your orders, customers, and products — with a mentions-of-me filter and a one-click deep link to each note on its detail page. You can now also attach files (images or documents) to any note and download them right from the note.
Act on orders, stock, and reviews right from the dashboard. Three new dashboard widgets let you handle the day’s work without leaving the home screen. Fulfillment queue lists paid orders still waiting to ship and advances each one a step inline. Reviews to moderate shows pending customer reviews with one-click approve and reject. Low stock surfaces the variants at or below their threshold with a jump straight to restock. Add any of them from the widget library. Each action uses the same permissions and audit trail as its full page, so a teammate only sees the buttons they’re allowed to use.
A refreshed dashboard. Your dashboard gets a cleaner top bar — the dashboard tabs, your greeting, and the time-range and compare controls now sit together in one panel instead of three separate strips. Each KPI tile spells out the exact dates it compares against (for example, “vs May 22 – Jun 20”), and if a figure can’t be loaded the dashboard now says so plainly instead of quietly showing a zero.
2026-07-20
A refreshed catalog workspace. Labels, content, and reviews are getting the same cleaner, more consistent design already live on the products list — a comfortable/compact density toggle on the tables, status pills that stay readable in dark mode, and smoother page transitions. Products and product creation started this look in an earlier update; labels, the content library, and reviews complete it across the whole Catalog area.
A refreshed commerce workspace. Every commerce page — orders, returns, subscriptions, customers, gift cards, complaints, inventory and batches, the failed-payment and stuck-order queues, and the whole partners section — now shares one layout. Record pages open with a summary band that leads with the number you came for: an order’s total, a return’s refund, a subscription’s monthly value, a customer’s lifetime spend. Lists put their search and filters in a single card above the table, and every table can be switched to a compact row height.
Status labels are readable in dark mode across all of it. A paused subscription now says “Paused” instead of showing as active.
Tidy your dashboard in one click. Editing a dashboard now has an “Optimize layout” button. It rearranges your widgets by priority — key metrics up top, then alerts, charts, and tables — and packs them with no gaps. You see the proposed layout as a preview first: accept it to apply, or cancel to leave things as they were. Pin any widget to keep it exactly where it is, and the packer arranges everything else around it. Changed your mind after applying? One click undoes it.
See how many records a list holds, and move through them faster. Paginated lists now show a running total — “Showing 1–25 of 1,312” — that respects whatever search and filters you have applied, so you always know how big the filtered set is (very large lists read as “10,000+”). Customers, orders, subscriptions, products, referrals and files all show it. Paging and filtering also feel quicker: row links now load on hover instead of eagerly prefetching every visible row, and recently-viewed pages stay warm so re-opening one is instant.
A clearer Markets workspace. Market events, series, close-out and market analytics now share the same layout as the rest of the admin: a facts-first summary band on event and series pages, and status pills that stay readable in dark mode. The event and series lists pick up the comfortable/compact density control. Creating an event or a series now opens from a button instead of a form that sits open above the list.
Settings is easier to navigate. The Settings home now links to every settings page — Plan & features, Notification preferences and Help were previously reachable only from the sidebar or a direct link. Settings pages also share the same layout as the rest of the admin, with status labels that stay readable in dark mode and a consistent card style across billing, team, shipping and fulfillment.
2026-07-19
A refreshed storefront workspace. The storefront area is getting the same cleaner, more consistent design the supply chain and marketing workspaces received — record views that lead with the facts, a comfortable/compact density toggle on the tables, status pills that stay readable in dark mode, and smoother page transitions. Banners, pages & navigation, branding, quizzes, and storefront settings land first, with the page builder and quiz builder following.
2026-07-18
A refreshed analytics workspace. Analytics now matches the refreshed reports and marketing workspaces: every section is framed as its own card at a consistent depth, and the date-range picker sits together with the data-freshness and refresh controls instead of being split across the page. The panels that do not follow the date range — recurring revenue, cohort retention and lifetime value — now say so directly on the panel, so a live snapshot is no longer easy to read as a figure for the selected window.
Create forms now open from the top of every list. Adding a record no longer means scrolling past the whole list to find the form. Across the admin — products, suppliers, promotions, wholesale accounts, practitioners, batches and more — a New button now sits at the top of the page and opens the create form in place, then collapses it again when you are done. Your position in the list is preserved, so adding several records in a row no longer costs a scroll each time.
Clearer integrations tables, and status that reads in dark mode. Status pills across your integrations — installed connectors, API keys, webhook endpoints and deliveries, and connector requests — now stay legible in dark mode instead of washing out. The installed, API key and webhook delivery tables also gain the comfortable/compact density toggle, so you can fit more rows on screen when you are scanning a long delivery history.
A refreshed marketing workspace. Marketing is getting the same cleaner, more consistent design the supply chain workspace received — record views that lead with the facts, collapsible sections that cut clutter, a comfortable/compact density toggle on the tables, status pills that stay readable in dark mode, and smoother page transitions. The marketing home and campaigns land first, with segments, promos, abandoned carts, affiliates, referrals, push and the email outbox following.
A refreshed reports workspace. Reports is getting the same cleaner, more consistent design the supply chain and marketing workspaces received. Each tab now leads with one page title instead of two, the tab strip, date-range picker and CSV download sit together in a single control card, and every table and chart is framed as its own card at a matching depth. Tables gain the comfortable/compact density toggle, empty panels explain what would fill them, and panels that ignore the date range — retention, cohorts and the 12-month spend views — now say so on the panel itself.
2026-07-17
A tidier notification bell. The notification bell now keeps itself uncluttered:
- Repeat low-stock alerts collapse into one entry. When stock stays low day after day, the bell updates a single “low stock” notification instead of stacking a fresh copy every morning — and a new one only appears again once you’ve read the last.
- Notifications you’ve already read drop out of the bell after a couple of days, so it shows what’s new instead of a growing pile of old, already-seen rows. The full history is always on the notifications page.
View metrics for your store’s entire history. The time-range picker on dashboards, reports, and analytics now offers an All time option. It spans from the day your store was created through today, so lifetime totals are one click away. Comparison is turned off for All time — there is no earlier period to compare against.
Bulk-edit product status and prices. Select products in the catalog list to change their status — set Active, set Draft, or Archive — or update prices in bulk: set one fixed price, or adjust every selected product by a percentage with a before→after preview before you apply.
Cancel an order. Cancel a pending or paid order right from its detail page. Cancel order in the header returns the order’s items to inventory and marks it Cancelled, after a confirmation. It does not refund the customer — if the order was paid, issue a refund separately. The cancellation is recorded in the order’s activity and the audit log.
Clearer failed payments and a way to finish stuck card sales. Payment-failure surfaces now tell you what a row actually is instead of leaving you guessing:
- Failed payments labels each row as a one-time payment or a subscription renewal. A one-time decline shows what’s known — the payment, the failure reason, and the amount — with plain copy (“One-time payment — no order linked”) instead of a row of dashes. When the payment carries an order, the row links straight to it.
- Market close-out now lists card taps that didn’t complete for the event, with the amount, the seller, the state, and the time — so you can see at a glance which card sales failed and who was selling.
- The market sell screen surfaces any unfinished card sale so you can resume it on the reader or cancel it on the spot, rather than leaving it stuck. Unfinished card taps also auto-cancel after a few hours. Cancelling never charged the customer and never moved stock.
Dark mode for the admin. The admin now has a full dark theme. It follows your device’s light/dark setting automatically, and you can override it any time from the theme switch at the bottom of the sidebar (System, Light, or Dark). Your choice is saved to your account and applies on every device you sign in from.
Install Orchard on your phone for market sales. Add Orchard to your phone’s home screen and it launches like a native app — full screen, with the Orchard icon, no browser bars. Ringing up sales at a farmers market or pop-up now feels like a proper point of sale, and a stray swipe mid-sale no longer reloads the screen.
Jump back to the top on long pages. Long admin pages now have a back-to-top button. Once you’ve scrolled down a couple of screens, a small button appears in the bottom-right corner — tap it to return to the top instead of swiping all the way back. It honors your device’s reduced-motion setting (an instant jump rather than a smooth scroll) and stays clear of the home indicator on phones.
Lists load in pages, with a rows-per-page picker. Long lists in the admin now load a page at a time instead of everything at once, so they stay fast no matter how many rows you have. A new footer shows where you are (“Showing 1-25 of 1,312”), moves you with Previous and Next, and lets you pick 25, 50, or 100 rows per page - your choice sticks across lists. Reviews is the first list on the new footer, and the analytics event feed gains a Load more button plus a cleaner, collapsible detail view for each event.
Quick sale takes you straight to your open market. The Quick sale shortcut is now market-aware: with one market open it jumps straight to that event’s sell screen, with several open you get a one-tap picker, and with none it opens the regular in-person sale form. You can also attribute an in-person sale to a market after the fact from the order page — pick the event and optionally the seller; inventory is never affected, so event reconciliation stays exact.
Manually resolve a stuck payment failure. Payment failures that can never clear on their own — a one-time card decline with no follow-up charge — no longer sit in the Action-Required queue forever. Expand any unresolved failure and use Mark resolved, with a required reason, to close it out. The reason is recorded in the audit log, and resolving a failure stops any further dunning emails for it.
A refreshed supply chain workspace. Supply chain is getting a cleaner, more consistent design — record views that lead with the facts, collapsible sections that cut clutter, a comfortable/compact density toggle, and full light and dark themes. The new supplier profiles land first, with ingredients, purchase orders, RFQs, specifications and recipes following.
Choose comfortable or compact tables. Every list in the admin now has a row-density toggle in its toolbar. Comfortable keeps the roomier spacing; Compact tightens rows so more orders, products, or customers fit on screen at once. Flip it on any list and every list follows.
2026-07-16
Archived products stay out of day-to-day workflows. Archived products no longer show up where new work starts: product and variant pickers, single-SKU stock adjustments, market pack-out, promo free gifts, quiz scoring, and specification linking. Your history is untouched — orders, reports, the inventory list, CSV exports, and the catalog’s Archived tab still show archived products.
Card reader shows the cart, takes tips, and asks for the receipt after payment. Market POS card sales now behave like a real retail checkout. The card reader shows your customer their line items and total before they tap, and an optional on-reader tipping screen (off by default — enable it next to your card readers on the Stripe integration page) lets them add a tip that is charged with the sale and reported separately from product revenue. The receipt prompt now appears after the payment is approved, and a failed charge returns you to the tender step with the error and a retry — never a receipt form.
Marketing tools now live in one place. Everything that grows revenue — Promos, Campaigns, Segments, Abandoned carts, Affiliates, Push notifications, Email outbox, Referrals, and Loyalty — now lives under a single Marketing area in the admin sidebar, between Commerce and Markets. Campaigns and Segments moved out of Automations, and the old Commerce › Marketing group is gone. Old links and bookmarks keep working (they redirect to the new home), and your pinned shortcuts carry over unchanged.
Four new widgets for your Marketing dashboard. Add Campaign performance, Automation health, Subscriber growth, and Promo usage to any dashboard from the widget library — all four now ship by default on the Marketing preset. Campaign performance shows sent/delivered/ bounced for recent sends; Automation health mirrors your Automations hub; Subscriber growth tracks newsletter and back-in-stock signups; Promo usage shows redemptions and discount value by code.
Platform benchmarks — see where your store sits vs the platform. Your dashboard can now show anonymized cross-store benchmarks: a “vs platform” percentile pill on the Revenue, Orders, and Avg order KPI tiles (e.g. “P62 of stores”) and a Platform benchmarks widget in the library. Benchmarks unlock automatically once at least 5 stores contribute — a hard anonymity floor. Only percentile summaries are ever computed; no store’s actual figures are visible to anyone. Contribution is on by default with a one-click opt-out under Settings › General.
The product page is now a workspace. The product detail page has been redesigned from the ground up. A header band leads with what you check most — status, price, storefront presence, last update. Below it, structure cards show each part of the product (variants, images, bundle, subscription, compliance) with live counts and previews, and take you straight there. The edit form is organized into collapsible sections that summarize themselves when minimized, with a save bar that stays in reach.
A sharper look for products, order details, and product creation. The products list, the order detail page, and the new-product flow are the first pages on Orchard’s refreshed design language. The products list gets a single filter bar (status, search, and labels together) and cleaner rows with the product photo and name up front. Order details now lead with what matters — the total, payment state, and fulfillment state — with the editing tools right below. Pages also ease in with quick, subtle motion (and stay still if your device asks for reduced motion). More pages move to the new look in the coming updates.
Create one-off market events without a series. Market events no longer require a recurring series. Create a standalone event — a single holiday market, a one-time popup — with its own name, venue, region, and booth-fee/travel prefills entered directly on the form. Multi-day markets are one click per extra day with the new “Duplicate for next day” button on the event page, and standalone events roll up into their own bucket in market analytics.
Filter webhook deliveries per endpoint and API keys by scope. The webhook deliveries log now names each endpoint (instead of a truncated id), filters to a single endpoint when you click one, and expands failed rows to show the error and response. On the API keys page, scope chips are now clickable filters.
2026-07-15
See how each market series performs with event analytics. A new Analytics tab in the Markets section compares your market series side by side: revenue, per-event profit (costs and shrinkage included), average basket, customer capture rate, discount leakage by reason, seller performance, and which products sell in person versus on the web. Flagged cash-count discrepancies from event close-out surface here too. Your main dashboard also gains a Revenue by channel widget splitting web and in-person sales over any window.
Order details show the payment record for every tender. The Payment card on the order-detail page now reads from the payments ledger: each payment on an order is listed with how it was taken (card online, card present, payment link, cash, Venmo, check), the amount, and its status — including refunded, so a fully refunded payment is visible at a glance. Multi-tender in-person sales (part cash, part card) show every tender instead of a single method label. Historical orders were backfilled, so the payment record is complete for past orders too.
Restore an archived automation. Archiving an automation is no longer permanent. Open any automation under Archived automations and choose Restore to bring it back. A restored automation never starts running on its own — it returns paused (or as a draft if it was never published), so you can review its setup and then resume it when you are ready.
Search your whole catalog from every picker. The product and variant pickers on inventory adjustments, batch creation and recipes now search your whole catalog as you type, instead of offering a dropdown built from only your most recent products. If your catalog outgrew that list, the older products were missing from those menus with nothing to say so — you can now reach every product and variant. A recipe linked to one of those products also shows its real name again instead of a dash.
Storefront tools now live in one place. Everything that shapes your storefront — Page builder, Pages & navigation, Quizzes, Branding, Storefront settings, and Banners — now lives under a single Storefront area in the admin sidebar, between Catalog and Supply Chain. Old links and bookmarks keep working (they redirect to the new home), and your pinned shortcuts carry over unchanged.
Subscription renewals now create real orders. Every successful subscription renewal now creates a real paid order, so renewals show up in your orders list and go through the same fulfillment, shipping-label, tracking, and refund flow as any other sale — no more renewals that charge a customer but leave nothing to ship. Customers still get the renewal email with their invoice, and no order-confirmation on top; subscribers are also left out of review-request emails so a monthly plan does not become a monthly review nag. Order-based revenue reports now include renewal revenue, which previously appeared only in subscription and recurring-revenue views — expect those report totals to rise. Renewals from before this change are not backfilled.
2026-07-14
Apply tags to products to power storefront category and filter facets. Add scoped tags to a product right from its detail page. A save-as-you-go
picker lets you reuse tags already in use across your store or create new
ones, and namespaced tags like tea::green group automatically. Your
storefront and public API can filter the catalog by these tags, so tagging
a product immediately shapes its category and filter facets.
Find batches and complaints by status, search bundle components. Batches and product complaints now have a status filter you can actually use — both pages already tracked status behind the scenes, but nothing let you set it. The bundle component picker also switched from a 200-item list to a searchable product picker, with an optional variant selector.
A guided setup checklist for new products. Creating a product now asks only for the basics, and tells you up front whether you’re building a standard product or a bundle. Once it’s saved, a setup checklist on the product page tracks what’s still to do — images, variants, bundle contents, subscription and compliance — and links straight to each one.
Close out a market event — stock return and cash count. Close a market event and reconcile it: return unsold stock to the warehouse or a kit, or write off the remainder with a reason. Count the cash drawer against sales the event recorded — a nonzero gap prompts a note, and a gap of $10 or more (or over 2% of expected cash) flags it for a tenant admin to review. Reconciling locks the event; a tenant owner or admin can reopen one to fix a mistake.
Fleet health alerts for platform operators. The operator console can now page the platform ops inbox when a store’s health signals start firing: failing payments, at-risk transitions, webhook failures, and stockouts. Each signal alerts once per episode — when it newly starts firing, not on every check while it stays elevated — and operators choose which signals alert under Settings, with critical signals on by default.
Per-store cockpit in the operator console. Every store’s detail view gains a Cockpit tab: live health with the reasons behind it, trailing-30-day revenue, orders, and average order value, subscription and lifecycle state, granted entitlements, and the most recent operator activity — each section linking to the page that owns the full detail.
Redesigned tenant Overview in the operator console. The operator tenant Overview now opens with a status summary — a health chip, the lifecycle and plan at a glance, the key stats, and the tenant actions — then groups every setting (payments and tax, fulfillment, storefront features) into clear titled cards instead of a long stack of separate save forms.
See subscription sync freshness and re-sync from Stripe. Subscription details now show when Stripe last updated the record and flag subscriptions whose billing period has lapsed without an update. A new Re-sync from Stripe action refreshes status, billing period, pause and cancellation flags, and line items on demand — and tells you outright when a subscription no longer exists in Stripe.
Search and sort your formulations. The formulations list is now a full table you can search by name, extraction method or ratio, and sort by name, ingredient count or version — with the linked product shown on every row. Ingredient forms also gained real field labels, and a formulation’s structure/function claim and allergens are now editable.
Sell at farmers markets with a fast POS. Ring up in-person sales from a thumb-first POS on any open market event. Tap products from the event’s stock, apply line or order discounts with a reason, take cash, Venmo, check, or card, and email the customer a receipt with an optional marketing opt-in. Sales decrement that event’s stock, attribute to the selling staff member (switchable by PIN on a shared device), and record the tender in the payments ledger.
Take card payments on a WisePOS E reader. Register a Stripe Terminal reader (WisePOS E) under Settings -> Integrations -> Stripe, and a “Tap / insert card” tender appears on the market POS. Ring up the cart, hand the reader to the customer, and the sale completes when they tap — no typing, no QR code. The reader follows your kit: Orchard connects to it automatically, so there is nothing to pick at the booth. If the customer walks away or the card is declined, cancel or retry from the same screen; stock is only ever deducted once the payment actually clears. Card details go straight from the reader to Stripe and never pass through Orchard.
2026-07-13
Analytics CSV exports match the window you’re viewing. Exporting a CSV from Analytics now covers the exact date range shown on screen — including calendar, fiscal, and custom drill-down windows — instead of always falling back to a trailing window ending today. Revenue, orders, funnel, and quiz exports all honor the selected range, and Orders and Quiz are now available as their own downloads alongside Revenue, Funnel, and Cohort.
Edit promotional banners and pause them without losing their schedule. Promotional banners now have Edit and Enable/Disable controls alongside Archive. Fix a typo or adjust the message, link, priority, or window without archiving and recreating the banner, and pause a banner temporarily without losing its settings.
Build quizzes without writing JSON. The quiz editor is now a structured builder: add, reorder, and edit questions and their options with forms, map answers to recommended product variants by picking them by name, and edit the result-page copy in plain fields. The raw JSON view is still available under an Advanced tab for unusual setups.
Compose pages with forms and a product picker. Page sections are now edited with typed forms instead of raw JSON: headlines, copy, and images get plain fields, and featuring products is a name search with removable chips — no more typing product IDs into a JSON array. The raw JSON view remains available per section under an “Edit as JSON” toggle.
See cost of goods sold on the Costs report. The Costs report now shows a real Cost of Goods Sold figure for the selected window, estimated from each product’s recipe (ingredient costs, labor, overhead, packaging, and warehouse) times the units sold — no longer a permanently blank “not tracked yet” card. The number labels its own coverage, so you can tell how many of the products you sold are actually costed and when some still need recipes or ingredient prices filled in. Requires the Supply Chain module.
Fleet health signals in the operator console. The operator console now scores every store’s health from live signals: failing payments, past-due subscriptions, order recency, low stock, webhook and email failures, and broken integrations. The tenants list shows a health chip with the reasons at a glance, the fleet home ranks the stores that need attention with a link to fix each issue, and a tenant-by-signal grid shows which signal is red across the whole fleet.
Page back and forth through long lists. Orders, customers, subscriptions, and products lists now have both Previous and Next controls plus a “Showing 26–50” position indicator, so paging deep into a long list no longer strands you with a one-way Next link.
See which product a review is for, and filter reviews by product or rating. The reviews list now shows the product each review is for, right next to the reviewer and rating, so you don’t have to open a review to know what it’s about. You can also filter the list down to a single product or a specific star rating using the new filter chips above the list, and approving or rejecting a review from a filtered view now keeps you on that same filtered view instead of bouncing you back to the unfiltered list.
Get a heads-up before leaving a builder with unsaved changes. When you’re building or editing a pricing rule, an automation, or a multi-step flow and you click somewhere else in the app before saving — the sidebar, a menu, or the “choose a different starting point” link — you’ll now be asked to confirm before your unsaved work is discarded. Previously this warning only appeared when you closed the tab or refreshed the page, so clicking a link in the app could silently throw away a draft. You can choose to keep editing, or discard and continue.
2026-07-12
Admin actions now confirm success or failure instead of staying silent. Several admin actions that used to give no feedback now do: cloning an automation to other stores reports which stores failed, retrying a failed automation send or enrollment shows a result, archiving catalog content updates the page immediately, marking an abandoned cart recovered or unsubscribed shows a confirmation banner, and the notifications “Mark all read” button reports a failure instead of pretending it worked. Buttons that create or archive records (practitioners, promos, banners, affiliates) also now show an error instead of crashing, and stay disabled while the request is in flight so a slow connection can’t create duplicates.
See your archived automations again. Archived automations no longer disappear entirely — a View archived automations link on the Automations page opens a read-only list of the ones you’ve archived, each linking to its configuration and run history.
Readable activity timeline on each automation. The flat “Recent executions” table on an automation’s detail page is now a chronological timeline that reads like a log — “Order ORC-260712-001 matched, sent the order confirmation email” — filterable by outcome, with each run expandable for the full trace.
Automations - readable summaries and browse by category. Automation cards now summarize what they actually do in plain language instead of a garbled condition string. An automation running in shadow mode (tracking but not yet acting) now shows that state and how many times it would have fired, and the automations hub is grouped by category with a browse-by-category view.
Move a batch lot through its lifecycle. The Batches page now has a “Change lot status” control to put a lot on hold (quarantine), recall it, or mark it depleted or expired — only the transitions that are valid for the lot’s current state are offered, and a recall asks for confirmation. Returning a quarantined lot to active stays under QA release.
Clear an optional field on supply-chain records. Emptying an optional field — a supplier’s phone, a purchase order’s notes, an RFQ deadline, a recipe’s linked product — and saving now clears it. Previously a blanked field was treated as “unchanged” and kept its old value.
Communications history now covers automated emails. Automation flow emails, abandoned-cart reminders (email and SMS), and back-in-stock notifications are now recorded in each customer’s Communications history alongside order and account emails. Previously only direct transactional sends (receipts, shipping updates) appeared there.
Failed connector installs now show the real error. When a connector failed to connect during install, the error surfaced as a generic failure instead of the specific reason. The install flow now preserves the real connection error and reports it on the connector page.
Dashboard and Reports numbers are now consistent everywhere. Revenue, MRR, customer counts, and retention now use one consistent definition across the dashboard, Reports, and every chart that shows them — closing several places where two views of the same window could quietly disagree. Charts also draw correctly with real axes and no longer show impossible values or blank gaps, the dashboard’s date-range label always matches what it’s showing, and the Analytics activity feed reads in plain language instead of raw event names.
Edit approved formulations safely through draft versions. Editing an approved formulation now creates a draft version for review instead of changing the live recipe, so the recipe in use never changes until a reviewer approves the draft. Draft versions are now editable before approval.
Gift card recipients now get their code by email. Issuing a gift card to a customer now sends them the code automatically. Previously the email template existed but never fired, so the only copy of the code was the one shown to the admin at issuance. Cards issued without a customer attached still show the code once, to share manually.
Start a new inventory import right after finishing one. After committing a CSV inventory import, “Start over” now returns you to the upload step for the next file. Previously the wizard stayed on the results screen and you had to reload the page to import again.
Action-required nav badges point to the right page again. The nav rail’s action-required badges — the counts that flag things needing attention — had silently stopped linking to the right screen after a recent navigation restructure. Every badge now resolves to its actual destination.
Order detail - payments, timeline, customer info, and notes together. An order’s detail page now shows the full payment breakdown, an activity timeline of everything that happened to it, the customer’s contact and order history, every email sent about it, and a place to log an internal note — all without leaving the order.
Reach the page builder and data-deletion queue from the sidebar. The storefront page builder and the data-subject deletion queue now have their own sidebar sections instead of being reachable only by URL. The Commerce marketing link is also relabeled to match the page it opens.
Publish, preview, and revert now work on the page builder. Draft storefront pages have a Publish control that saves a rollback snapshot, the Preview button opens on your storefront instead of a dead admin link, and reverting a page to its default now refreshes the sections editor instead of showing stale content.
Marking a partner payout paid or failed no longer lands on an error page. Recording a partner (affiliate) payout as paid or failed now returns you to that partner’s payout list with the status confirmed, instead of an error page — so a completed money-status change is clearly acknowledged and never invites an accidental retry.
Promo codes sync to your live Stripe account and deactivate on archive. Creating a promo with Sync to Stripe now uses your live Stripe environment when your store is live (previously it could be created in test mode), and archiving a promo now reliably deactivates its Stripe promotion code so it can no longer be redeemed. If a code can’t be deactivated automatically, the promos page tells you so you can remove it in Stripe.
Settings and partner pages are reachable from the nav. General settings, shipping settings, the storefront settings hub, wholesale tiers, and practitioner documents existed but weren’t linked from anywhere in the admin nav or their parent hubs. All five are now reachable directly from the nav rail and their relevant hub pages.
2026-07-11
Checkout blocks duplicate subscriptions and reuses your Stripe customer. Starting a subscription checkout for a product the customer already has an active subscription to now returns a clear conflict instead of creating a second one. Subscription checkouts also reuse the customer’s existing Stripe customer record instead of minting a new one on every purchase, and subscription line items carry your product and variant IDs in Stripe metadata for easier reconciliation.
Destructive actions now ask you to confirm. Canceling a subscription, archiving a rule, suspending a practitioner or affiliate, removing a product variant, regenerating a webhook secret, and upgrading a plan now show a confirmation before taking effect, so one accidental click can’t fire them.
New rules-gallery recipe for a first-order free gift. A new “first-order gift” recipe in the automation rules gallery adds a free gift item to a customer’s first order when they buy a gift-eligible product — one click to set up, no custom rule-building required.
Formulations - fully editable recipes and linked ingredients. Formulation detail pages are now fully editable — every recipe field (solvent, standardization, batch yield, dosage, storage notes), ingredients with a proper amount and unit, and your own custom key/value fields. Ingredients can also be linked to an entry in your ingredient registry with typeahead search and inline-create, and the registry shows every formulation that uses a given ingredient.
Safer gift card balances, clearer detail, and searchable lists. Two customers adjusting the same gift card balance at once can no longer create an inconsistent total, and the underlying code is now masked in storage the moment it’s issued, matching what the admin already shows. The gift card detail view shows a clear confirmation, a projected balance, and links to related records, and the gift cards list supports search and no longer truncates for stores with many cards.
Inventory bulk-adjust CSV actually round-trips. Exporting your inventory, editing the CSV, and re-importing it now applies the changes correctly — the round-trip previously dropped edits silently. Inventory events also now show which SKU was oversold, instead of an unlabeled row.
Inventory, Returns, and Abandoned Carts lists no longer drop rows. Large Inventory, Returns, and Abandoned Carts lists previously stopped showing rows past a certain size with no indication anything was missing — all three are now properly paginated and searchable, so nothing silently disappears.
Export any Reports tab to CSV. Every tab in Reports — KPIs, Trends, Customers, and Costs — can now be exported to CSV.
Failed settings changes now show an error you can retry. When a change you make in the admin can’t be saved — like a label’s single- vs multi-select setting, or marking a label as a priority — you now get a clear error with a Retry button, and the control rolls back to its previous value. Previously a dropped save could revert silently, making it look like the setting hadn’t taken effect.
Subscriptions list shows real product, currency, and status. The subscriptions list now shows the actual product, currency, and status for each subscription, and the renewal forecast reflects what’s really scheduled to renew instead of an inflated estimate.
2026-07-10
Admin stops erroring out after periods of inactivity. The admin could occasionally return an error page after sitting idle for a while, when a background database connection went stale before being reused. That connection now refreshes automatically before it’s handed to a request.
Every automated email now appears in the customer’s Communications tab. Order confirmations, shipping notices, digests, and every other automated email now write to the customer’s Communications history — previously that view only showed messages sent manually from the admin compose form.
GDPR customer data requests no longer crash the admin. The GDPR request queue and customer detail page could fail to load entirely. Both are fixed.
Dashboard digest emails can attach the PDF inline. A dashboard digest subscription set to attach or both now includes the PDF directly in the email instead of only a link to view it, and every widget type now renders faithfully in that PDF.
Preset dashboards for finance, ops, marketing, and execs. Pick a ready-made dashboard preset built for your role — finance, operations, marketing, or executive — instead of building one from scratch.
Subscription renewals process automatically again. A payment-processor API update had silently stopped subscription renewals from completing — inventory wasn’t decremented, renewal emails didn’t send, and failed payments weren’t entering the dunning flow. All of that is fixed; renewals process end to end again.
Webhook signing secrets no longer appear in a URL. Creating or regenerating a webhook’s signing secret previously passed it through a redirect URL, where it could land in browser history or server logs. The secret is now revealed once, in-page, and never appears in a URL.
2026-07-07
An optional AI-written summary in your weekly digest. The weekly digest can now open with a short AI-written paragraph — the single most important takeaway from your week and the drivers behind it, written from the same aggregate numbers the digest already shows. It is never generated from individual orders or customer data.
It’s off by default at every level: your platform operator has to make the feature available to your store, and then you turn it on yourself under Settings → General. The summary is generated once per week; if it’s off, nothing is sent to the AI provider at all.
Get alerted when a KPI breaks from its trend. Orchard now scans your store nightly and compares yesterday’s revenue, orders, and average order value against your own trailing 28 days. When a day lands far outside your normal range — in either direction — an alert lands in your notification bell, and you can mute it per channel from Settings → Notifications like any other notification type.
There’s also a new Alerts widget in the dashboard library (System Health category) that lists the last week of anomalies with how far outside the range each day landed. New stores are exempt until there’s enough history to judge against, so you won’t get noise while you’re ramping up.
A Monday morning email with your week in review. Turn on the weekly digest (Settings → General) and every Monday at 7am your store’s time, team members who can view analytics get “Your week”: last week’s revenue, orders, and average order value compared to the week before and the same week last year, the products that moved the most, any KPI anomaly alerts, and a count of things waiting on you.
It’s off by default, each recipient can unsubscribe individually from the email footer, and brand-new stores aren’t emailed until they have orders to report.
2026-07-06
Accept gift cards from a custom storefront. Storefronts built on the public API can now take gift cards. Read a card’s
balance with GET /api/v1/gift-cards/:code/balance, and pass a
gift_card_code to POST /api/v1/checkout/sessions to apply it at checkout —
customer credit is applied ahead of a promo code, matching the built-in
storefront.
A guided start for new stores, and an honest funnel. A brand-new store now lands on a guided three-step setup surface — add your first product, set your branding, configure shipping — instead of a dashboard full of $0.00. Once products exist, a slim banner notes you’re just waiting on the first order; the widgets fill in automatically the moment it arrives.
The conversion funnel is also more honest about missing data: if orders are coming in but storefront session tracking isn’t set up, it now says exactly that instead of “no traffic”.
No more duplicate confirmation emails. Order-confirmation and subscription-welcome emails are now sent exactly once per order. An internal retry could previously re-send them for an order that got stuck mid-fulfillment; a send-once ledger closes that gap.
Collect quiz responses from a custom storefront. Storefronts built on the public API can now submit quiz answers with
POST /api/v1/quizzes/:slug/responses, so a headless storefront can run the
same product-recommendation quizzes as the built-in one.
Today / This week / This month now follow your store’s timezone. The dashboard’s Today, This week, and This month tiles — and the monthly goal progress — previously reset at midnight UTC, not your store’s midnight. For stores outside UTC that meant an order placed on Tuesday evening could count toward Wednesday, and the tiles could quietly disagree with the month-to-date and week-to-date views elsewhere on the dashboard.
All of these now use your store’s timezone (set under Settings), so every surface that shows the same window shows the same number. Expect a one-time shift in Today / This week / This month figures if your store isn’t on UTC — the new numbers are the correct ones.
Your time window follows you from the dashboard into Analytics and Reports. Click through from a dashboard tile and the target page now opens on the same window you were looking at — a fiscal-quarter-to-date dashboard opens fiscal-quarter-to-date Analytics, the This month tile opens month-to-date.
Analytics and every Reports tab also gained the dashboard’s full grouped time picker (trailing, calendar and fiscal to-date windows) in place of the old “last N days” strip, computed in your store’s timezone. Old links with day-count windows keep working exactly as before.
2026-07-05
Dashboard time ranges and period comparison. The dashboard time selector now spans to-date and fiscal ranges — week, month, quarter, and year to date, plus fiscal-month/quarter/year to date — and every widget re-windows to match, in your store’s time zone and fiscal calendar.
You can also compare any range to the previous period or the same period last year: the revenue trend shows a dashed overlay and each KPI shows its change. Set a comparison for the whole dashboard, or override it on an individual chart from its gear menu.
SKUs on order line items. Order detail now shows each line item’s SKU next to the product name, so you can pick and pack without cross-referencing the catalog.
2026-07-04
Plan upgrades now prorate in place. Upgrading your Orchard plan while you already have an active subscription now adjusts that subscription with proration instead of opening a second one. No more overlapping plans or double billing until the old period ended.
2026-07-03
A new Automations area. Automations get top billing: a command-center home with your automations’ health at a glance, and a library of ready-made flows grouped by outcome — protect ad spend, watch inventory, delight customers — each with a visual preview before you install it.
Build rules and automations on a visual canvas. Triggers, conditions, and actions are laid out as connected steps on a canvas. Click any step to configure it in the side panel, and dry-run the whole flow before publishing. Pricing rules use the same canvas.
See what’s new — right here. This feed, reachable from What’s new in the sidebar. Every merchant-visible change lands on the timeline as it ships. Search it for a feature, filter by type or area, jump by month, and follow the links into the docs. A dot marks what’s changed since you last looked — clear it with “Mark all as seen”. Integrators get the same history on the docs changelog.
2026-07-02
A more consistent admin. Every page now shares the same headers, stat tiles, pickers, and controls, so the whole admin feels like one product.
Bulk labeling and multi-label filters. Select several rows and a floating bar appears for adding or removing labels in bulk. List filters accept multiple labels at once.
Labels, redesigned. Applied labels stay in view; the full registry appears only when you open a picker. Toggling a label saves instantly — no Save button. And labels now declare what they apply to, so pickers only offer ones that make sense in context.
Automations that react to your store. Trigger actions from real events: pause an ad campaign when stock dips below a threshold, or act the moment an order lands. Every run is traced so you can see exactly what happened, and per-rule limits keep automations safe.
Request an integration. Don’t see the service you need? Request it from the marketplace — including on coming-soon listings — and you’ll see status updates as it progresses.
Subscription checkouts, more reliable. Orders created by a subscription checkout now complete dependably with customer and shipping details attached, and each subscription records its full item detail — products, quantities, and billing interval.
2026-07-01
Introducing Rules. Automate pricing and promotions with if-this-then-that rules. Build one from a recipe, test it in the simulator against a real cart, publish it when you are confident, and watch its impact on the rule’s detail page.
2026-06-30
Sell where your customers are — Google, Meta, Walmart. Sync your catalog to Google Merchant Center, list on Facebook and Instagram with Meta Shops, track ad conversions with the Meta Conversions API, and sell on Walmart Marketplace with orders syncing back automatically.
Peek into any list row. Rows in Orders, Products, and other lists expand in place for a quick summary — act on what you see without leaving the list.
Real low-stock counts for storefronts. The inventory API returns actual low-stock quantities (capped) instead of a yes/no flag, enabling honest “only 3 left” messaging without exposing full stock levels.
Organize everything with labels. A managed label registry replaces free-text tags: colors, descriptions, scoped values, and per-label storefront visibility. Apply labels across products, customers, orders, and subscriptions, filter any list by them, and let customers filter by them on your storefront.
Save your filtered views. Dial in a filter on any list, save it by name, and jump back with one click.
2026-06-29
First connectors — email, tax, support, shipping. Mailchimp, Klaviyo, Postmark, TaxJar, Shippo, EasyPost, Help Scout, HubSpot, and Intercom are installable from the marketplace — connect the tools you already use in minutes.
Chargebacks and disputes, surfaced. Disputed payments now appear in your Action Required view with the details you need to respond — no more finding out from your payment dashboard.
2026-06-26
The integrations marketplace. Browse a curated catalog of integrations and install them without leaving the admin. Each connector has a guided setup wizard, and merchants can rate and review connectors to help each other choose.
Pin your favorite admin pages. Star any page to pin it to the top of your navigation — your pins follow you across sessions.
2026-06-25
See what your plan includes. Your plan and its features are visible in Settings. Premium unlocks faster email delivery, real-time storefront inventory, and more frequent analytics refreshes.
2026-06-17
Build your own dashboard. Your admin home is now composable: pick widgets, arrange them your way, set metric targets and date ranges, and share a dashboard with your team. An Action Required widget keeps failed payments, stuck orders, and returns in view — pin it front and center or tuck it away.
2026-06-10
Documentation platform and major new sections. The docs moved to a new platform with full-text search, structured navigation, and an embedded, always-current API Reference.
- New Tutorials: product catalog, cart-to-checkout, customer accounts (magic link), and a webhook receiver.
- New User Guides per admin area: products, orders and fulfillment, inventory, customers, content, reports, and settings.
- New developer references: Integrations, Security and compliance, and Troubleshooting.
- New concept pages: Data model, Architecture, Order lifecycle, and Subscription lifecycle.
Webhooks are functional end to end. Outbound webhooks now emit real lifecycle events and sign them with a secret you can verify.
- Events now fire.
order.paid,order.refunded, andsubscription.created/updated/canceledare emitted on the corresponding state changes, delivered within about five minutes via a durable queue. Previously only thewebhook.pingtest event fired. - Verifiable signatures. The
X-Orchard-Signatureheader can be verified with the secret shown when you create or regenerate an endpoint. An endpoint created before this change must regenerate its signing secret once before its signatures will verify. - See Webhooks, Webhook events, and Verifying signatures.
2026-06-04
Custom roles with granular permissions. Preset roles not fitting? Create your own in Settings, selecting exactly the permissions each role needs.
2026-06-01
A published JavaScript SDK. Build storefront features and checkout flows with the published
@amirdallal/orchard-sdk-client package — type-safe, versioned, and ready for
custom integrations.
2026-05-26
Granular marketing-email consent. Customers can opt in or out per email type, one-click unsubscribe is honored instantly, and every consent change is logged.
Referral programs. Give customers a personal code to share. Referrals are tracked end to end, and both sides can be rewarded with store credit, points, or discounts. Customers follow their referrals from their account.
2026-05-25
Promotional banners with automatic discounts. Run storefront banners on a schedule and attach a discount that applies automatically at checkout — customers see the savings without typing a code.
2026-05-24
Live stock on product pages. Stock badges update in real time without a refresh, and customers can ask to be notified when an out-of-stock product returns.
2026-05-22
A full loyalty program, earn and redeem. Customers earn points on purchases and subscription renewals — plus birthday and anniversary bonuses — and redeem them as store credit at checkout. You set earn rates, values, and expiry; a per-customer ledger shows every movement.
Web push notifications. Reach customers with push notifications for order updates, back-in-stock alerts, and promotions — even when your store’s tab is closed. Customers manage their preferences in account settings.
2026-05-21
A notification center for your customers. Order updates, announcements, and account alerts now land in an in-app notification center. Customers control what they receive, globally or per type.
Email templates with version history. Every template edit is saved automatically. Compare versions, see who published what and when, and roll back in one click.
Failed-payment recovery that runs itself. When a subscription charge fails, the customer is prompted to update their payment method, reminder emails go out on a schedule you control, and gentle automatic retries recover many payments on their own.
Sell and manage gift cards. Sell gift cards on your storefront, track balances, redemptions, and expiry in the admin, and send a gift card directly to any customer.
Live carrier rates at checkout. Customers see real-time shipping rates from the carriers you enable, updating as the cart changes — no more surprise shipping costs after the fact.
Build custom pages. Compose landing pages and info pages from sections, preview them with a secure link, and publish instantly. Version history means you can experiment safely.
Commission payouts for partners and practitioners. Track commissions for partners who refer orders, onboard them for payouts via Stripe Connect, and transfer earnings automatically or on demand.
Choose the payment methods you offer. Enable or disable payment methods — including buy-now-pay-later — at the store level, so checkout only shows what you actually support.
Product reviews, moderated by you. Collect star ratings and written reviews on product pages, approve or reject them before they appear, and show rating summaries on product listings.
Pause, skip, and reactivate subscriptions. Customers can pause a subscription, skip a shipment, or pick it back up later — right from their account. You choose whether resumed subscriptions keep their old price or move to current pricing. Flexibility that saves cancellations.
Shareable wishlists and saved carts. Customers can share a wishlist with a link and save a cart to finish later — handy for gifting and a second chance at abandoned selections.
2026-05-20
Age verification for restricted products. Selling age-restricted goods? Customers confirm their age at checkout, and each confirmation is logged with the order for compliance.
2026-05-12
Shipping labels bought for you. When an order is paid, a shipping label is purchased automatically at live carrier rates and attached to the order — download and print, with tracking already linked.
2026-05-11
Manage your store programmatically. Products, orders, customers, and fulfillment can now be managed through the admin API. Every endpoint enforces role-based permissions, sensitive operations require re-authentication, and requests are safe to retry.
Customers get an account portal. Shoppers can view their order history, manage communication preferences, update their details, and request a copy or deletion of their data — all from a dedicated account area on your storefront.
Customer privacy tools, built in. Consent is recorded with timestamps and sources, customers can request a portable export of their data, and sensitive details are automatically scrubbed from long-lived logs. Manage requests and consent records from the admin.
Maintenance mode, legal pages, and sitemaps. Storefronts gained a configurable maintenance mode, ready-made legal and policy pages, friendlier error pages, and automatically generated sitemaps for search engines. Preview any page with a secure link before it goes live.
Wholesale pricing tiers. Create wholesale tiers and assign customers to them — their pricing applies automatically in the cart and at checkout. Sell to retailers and consumers from the same catalog without juggling separate price lists.
2026-04-24
A complete API reference for integrators. An OpenAPI specification and a browsable reference at /api-docs document the
platform surface for external integrations — authentication, catalog, commerce,
customers, and reporting — with schemas for every resource.
2026-04-17
Search, notifications, and keyboard shortcuts. Cmd-K global search, a notifications bell with pending counts, and a keyboard shortcuts overlay (press ?) landed in the admin shell.
2026-04-16
Core commerce is live. Products, orders, customers, subscriptions, inventory, refunds, and promos are live.
2026-04-14
One identity across all your stores. Magic-link sign-in with a single identity across every store you manage. Membership re-verifies on every request.
Earlier
The platform was under active development before this log began. The API Reference reflects the current surface; for the conceptual model, start with Concepts.
Building on Orchard and want to be notified of breaking changes? Subscribe to the relevant webhooks and watch this page. Questions: amir@dallal.me.