Changelog
What's new
The workbench moves almost daily. Updates are grouped by area below, with the most recently-touched area open first. Open any section to see what shipped there, newest first. The math behind any number is always published at /the-math.
3D printing
185October 11, 2026
A failure buffer of its own for multicolor products
A print that changes color fails more often, and when it fails you lose the whole print, the purge and every swap with it. Those products rarely reach the five finished jobs that earn a learned rate, so until now they priced on the same buffer as a plain single-color part. Settings, Assumptions now has a second number beside the failure buffer: the buffer a multicolor product launches on until it has learned its own rate. Leave it blank and nothing changes. It applies to any product with a measured color split or more than one color, on the catalog, the quote, the export, the dashboards and the cost frozen into a sale.
Shop time on a printer, and plates you print for the shelf
Two things on the jobs board, in one card. Shop time: take a printer for your own work (a test print, a project) for a set number of hours. It reads busy on the board, and the routing suggestions, the capacity planner, and the make list all hold that printer until the time is up. Nothing is charged to filament and no sale is recorded. Shelf plates: save a plate you print for stock once (the product, how many the plate holds, the printer it is sliced for, and its print time), then add it to the queue with one click. It queues as one job on that printer, and when you mark it done every unit on the plate goes onto the shelf and the filament is charged.
The printer dropdown only lists printers the part fits
Picking a printer for a queued job used to offer every printer you own, including ones whose bed is too small for the part. The dropdown now leaves those out, using the same fit rule the routing suggestions use (the part's footprint plus clearance, in either orientation, and its height). A printer with no bed size saved, or a part with no size on record, still shows, because Anvil cannot judge the fit.
Write off a shortfall whose roll is gone
The Filament page's printed-with-no-roll-to-charge fold had two doors: add the roll the plastic came from, or weigh. A shortfall whose roll was thrown out long ago had neither, and sat there asking. Each color's line now carries write off: the grams stay counted as used and the shortfall closes without a roll, nothing moves on any roll. The two honest doors stay the first choice. Also: the Etsy SKUs page now says how a multicolor listing's Color value is read (slots in order, split on the slash), and the shop's 70 colors each carry a reorder point of one roll, so the shopping list, the low chips, and the low-stock email are live.
The router counts the rolls you would have to open
Routing a small part to the small bed can mean opening a fresh roll of a color that is already loaded on a big printer. The router now weighs that: the smaller bed keeps the job when the two free up within about four hours of each other (open the roll), and the printer already holding the color takes it only when it frees meaningfully sooner. Either way the Routing line says why: new roll here, the K2 holds the color but its queue frees it 20h later. It only knows about rolls that are loaded in Anvil, so a roll you moved by hand shows up once you load it on the Filament page or the next job starts with it.
The jobs board routes a print by the part
A new 3D job used to land on whatever printer its catalog row was sliced for, so the big machines carried the pile while the small ones sat idle. Now every new part is routed on its own stamped size: the smallest bed it fits (a 12-inch planter's bottom that fits a 250 bed goes to a 250 bed, so the big bed stays free for the top), then the printer already holding its color, then the lane that frees first. Give each printer a band in Settings (big beds take 10 inches and up first, small beds 8 and under) and the router keeps big beds for big prints without fencing an idle one off. The board's new Routing line proposes moves for the waiting queue with the reason for each, apply one or all; a printer you set by hand is pinned and never moved. An idle printer can offer filler: a shelf restock batch, or the oldest waiting job of one shop's products. You still slice for the printer it lands on.
The queue counts a color's rolls
The jobs board's filament panel read not tracked on a color whose only stock was its rolls, because it looked at the old color-level number alone. It now counts from the rolls first, the way the Filament page does, so a color with a roll on the printer shows its real on-hand against the queue's demand. Also: the Kobra slot-4 caution now recognizes a Kobra by its model, so you can name your printers whatever you like.
A second open roll of the same color
The Filament page offered Weigh an open roll only while a color had none, so a second roll already in use had no door but the register panel. Every color row now carries + another open roll under its rolls: type the scale reading (with or without the spool) and the roll registers off the color and lands at that weight, the same as the first.
A roll added after the print pays for the print
When a print asked a color's rolls for more than they held, the shortfall stayed on record as printed with no roll to charge. Now the roll you add next settles it: a sealed roll (or one registered without a scale reading) added to that color gives up those grams and counts as opened, oldest print first, as far as the roll goes; a roll too small leaves the rest for the next one. Weigh the roll instead and the shortfall simply closes, because the scale already told the truth. The page says what came off the roll as you add it.
Add a color to one job
A one-off no longer needs a product change. On any queued or printing 3D job, press + color, pick the spool and type the grams that color will take: the job carries its own split (a chip per color on the board, the grams shown beside each), the typed grams come out of the main color so the print's total plastic is unchanged, and on finish each color's spool is charged its share. Remove a color and its grams go back to the main. A reprint keeps the one-off's colors. Pricing is untouched: what the one-off sells for is your call on the sale.
Start a print and its rolls load themselves
Changing colors all day means the loadout never matched the printers. Now the moment a job starts on a printer, whether you press Start or the printer's own bridge reports it, every color the job uses gets a roll loaded there if it has none: the fullest open roll off the shelf, else a sealed one (opened), else the roll that was sitting on another printer, since it evidently moved. A color already on that printer is left alone. A single-roll printer swaps its roll; a multi-slot unit takes a free slot first, keeps off the Kobra's flaky slot 4 while another is free, and only bumps a roll whose color the job does not use. The finish then charges the roll on that printer first. Nothing here can stop a print from starting.
A print charges every roll of its color, and what no roll could cover is on the page
When a print finished, its grams went to one roll of that color and stopped there: if that roll was already empty, or ran out partway, the rest was written down as zero. Measured on one shop: 113 finishes since July landed on an empty roll while a sibling roll, or a sealed one on the shelf, held the plastic. Now a print charges the loaded roll first, then the open rolls, then a sealed one (opening it, and saying so) until its grams are covered, so a roll running out mid-print spills onto the next. Whatever no roll could give is kept on record, and the Filament page shows it: Printed with no roll to charge, per color, with the last 30 days' grams, so the fix is one line away: add the roll the plastic came from. Every color row also gained a History fold, the color's own ledger and its rolls' events as one dated list. Two doors closed along the way: a roll always belongs to a color now (a roll with no color counted nowhere), and the register form no longer offers to add a roll's grams to the color's stock, because the roll's grams are the stock.
Reorder points for every color in one go
The shopping list, the low chips and the low-stock email all wait on a color's reorder point, and typing one on every color is a chore that never gets done. When any color has none, the Filament page offers to set them at once: low at one roll left (each color's own roll weight) or at a figure you type. Only colors without a point are touched; one you set by hand stays.
The shelf in dollars, the last day's weighing, and a shopping list
The Filament page now opens with one line that says what your shelf holds: rolls, kilograms and what they are worth at each roll's own purchase price, plus what the last 24 hours did (rolls weighed, rolls registered, sealed rolls added) and how many open rolls have never been weighed at all. Every brand fold carries its own dollar figure. And when colors sit under their reorder point, a Shopping list fold groups them by brand and type, the way you place an order, with the whole rolls that clear each point.
Delete a roll
Every roll line on the Filament page, and the roll's own page, now has a delete. It asks first and says what goes with the roll: its weigh and print history and its tags, which become reusable. The color's on-hand simply recounts from the rolls that remain, so a duplicate registered by mistake is one click to clear.
Every color of a multicolor print gets its own name and its own spool
A three-color print used to offer two color choices on the jobs board: the main color and one accent, with every extra color lumped into that accent. Now each color is a slot. Name them on Edit details (Main, Tree, Base band) and give each a default spool, and the board shows one labelled chip per slot to confirm or change before you print. On finish, each slot's spool is charged its measured share of the plastic; a slot you left unset folds into the main color instead of guessing a roll. An Etsy color label that names the colors in slot order (Beige / Brown / Green) lands each one on its slot, a reprint keeps every color the attempt used, and a fresh slice from the Forge brings the designer's colors along as hints, matching a slot to your library when exactly one color wears that hex.
A tag per color, and filament stock lives on the Filament page
You can now tag a COLOR instead of every roll. Print the tag sheet (one square per color, from the QR labels tile), stick a blank NFC sticker in each square, and on its first read pick the color it belongs to. Every read after that opens that color on the Filament page, ready to weigh the open roll, add a sealed one you just ordered, or set its reorder point. Roll tags keep working beside color tags. The filament stock controls moved off the Inventory page onto each color row: on hand (counted from the rolls when a color has any, yours to type when it does not) and the reorder point. Every active color is tracked now, no opt-in; the Inventory page keeps a signpost with the totals and the colors running low.
Weigh a roll that has no record yet, and attach a tag to a roll you already have
A color with no open roll now carries a Weigh an open roll form: type the scale reading and the roll registers itself off the color (brand, type, price, net weight) and lands at that weight, no tag needed. With spool uses the color's known empty-spool weight, or the one you type beside it. And when the reader reads a tag it has never seen, the register panel first offers your untagged rolls, sealed ones first: attach the tag and that roll keeps its record instead of a duplicate being minted. A sealed roll counts as opened the moment its tag attaches. The register panel also opens reliably on every tag read now.
The Filament page is now your filament inventory
Rebuilt around a weigh session. A command station sits at the top: the USB reader tile glows while it waits for a tap, and register, add a color, import, QR labels, inspect and erase open in one panel under it. Brands fold cleanly: chips while collapsed, color rows when open, brandless colors last under No brand, one add-a-color per brand. Each color row shows grams on hand, open and sealed rolls, tags, and low, loaded and weigh-due chips; open it for every roll with an inline weigh that keeps you on the page, a plus and minus for sealed rolls (registered at catalog weight, since a color with rolls counts from its rolls), the reorder point and days of cover, and the editor and aliases folded away. A tag read lands on the register form with the tag filled in.
Register another roll like one you already have
The spool register form now opens with a row of chips, one per brand, type and color your rack has seen. Tap one and the form fills in the brand, type, color, price, net weight and empty-spool weight from that roll, so a case of six identical rolls is tap, tag, weigh and save six times over. The tag, the scale reading and the add-to-stock box stay per roll, since those are the only things that differ between twins.
A pre-printed add-on comes off the shelf, not the print queue
If you print an add-on in batches, such as a set of plant stakes, mark its catalog product as fulfilled from stock. An order that takes the add-on no longer queues a job for it beside the planter. The queued card says to pack one and how many the shelf holds, and when the planter finishes, the sale takes one unit off the shelf and books its cost along with the planter. If the shelf is empty the sale books the add-on at its expected cost and flags it, so a missing batch never hides.
Price push can take your add-on rows along
When a listing already carries your add-on's size rows, such as "M 5 inch + 6 stakes" beside the plain M, the push preview now offers a switch to include them, on by default. Checked, each add-on row is priced at its plain size plus the add-on, and confirming also marks the add-on as offered on that listing, so every later push and sync prices those rows too. Before, that switch lived only on the SKUs page, and a listing that had not been flagged there showed its add-on rows as unmatched and left them behind.
Sell an add-on inside a listing's size dropdown
Etsy allows two variations, and most planter listings spend them on color and size, so an extra like a set of plant stakes has to live inside the size list: "6 inch" and "6 inch + Stake Set". Anvil now understands that shape. Give a catalog product an add-on price (Edit details, Sold as an add-on for) and tick it on a listing from the Etsy SKUs page. Sync sizes, Add sizes and Stamp SKUs then write a twin of every size, wearing the size's SKU plus the add-on's code and priced at the size's sticker plus the add-on, grossed up through your standing markup like every other price. The price push and the drift watch price the twins the same way, and an order for a twin queues the product and the add-on together as one run, so packing waits for both. A listing you have not ticked keeps any twin rows it already has exactly as they are: they are never removed as duplicates or re-priced to the plain size. One limit is Etsy's, not ours: a listing that carries a third variation (color, size and, say, Stakes) cannot be written at all through Etsy's API, so Sync, Add sizes, Stamp and Push now say so plainly instead of failing, and orders from such a listing still queue the add-on.
A cancelled Etsy order leaves the print queue on its own
When a buyer cancels an Etsy order, or you refund it in full, before the print has started, the next sync now takes that job off the board for you. Until now the sync only reversed the recorded sale on a cancellation, so a cancelled order's job sat in the queue waiting to be printed by mistake, and a buyer who accidentally ordered three of the same planter left you three jobs after cancelling two. Only queued work is removed: a part already printing or finished stays put for you to decide. The order keeps a cancelled record so no later sync can queue it again, and the sync summary says how many were taken off. The website order feed already worked this way; Etsy now matches it.
Two brands on one account keep their own SKUs
If you run more than one shop from one bench, products saved from your slicer feed now keep the right brand on their SKU. A product that already has SKUs keeps that brand when you add a size or re-slice it. A brand-new product takes the brand your slicer feed sent with it. Anything else uses your Etsy shop code, as before. SKUs you already have do not change.
A re-slice keeps the names you gave a one-size product
A product sliced at its original size always arrives from the slicer as its file name with the size "Original". If you had since folded it into a shared product as a style (say a Tri-Color and a Dual Color of the same box, so both can sell on one listing), the next re-slice filled the drafts inbox with the old names again, and saving would have created a second copy beside the one you renamed. The inbox now fills in your own product name, part name and variant for that case, so saving updates the row you already have. Products on a size ladder are untouched: their sizes still have to agree before a draft may update a row.
Seventeen new printers in the preset list
The Add printer form can prefill a machine's specs from a preset, and the list now covers this year's launches: the Anycubic Kobra S1 Max, Kobra X, Kobra 4 and Kobra 3 Max, the Bambu Lab A2L, P2S, H2S and H2C, the Creality Hi Combo and K2 Pro, the Prusa CORE One L, the Elegoo Centauri Carbon 2, the Qidi Q2, Plus4 and Max4, the Snapmaker U1 and the Sovol SV08. Prices on the older presets were brought up to date too. One honest note: almost nobody has published a measured power draw for the new machines yet, so their watts are estimates scaled from a measured sibling by bed size. The sources page says which is which, and every field stays editable, so a reading from your own smart plug beats ours.
A multi-color product stops paying for its purge twice
When your slicer measures a multi-color plate, the weight it reports for each filament already counts the flush between color changes. Anvil was then adding its own purge estimate on top, so the same plastic was billed twice and the product priced high (on a three-color planter, a couple of dollars at the big sizes). A product that carries a measured color split now prices the flush once: the grams it came with. A multi-color product you typed the grams for yourself is unchanged, because those grams never saw a flush, and single-color products never paid a purge at all. The math page explains both cases.
Pins are now tall cards with the product name on them
Pinterest's feed is a column of tall cards, and a square product photo was being cropped or shown small. Each pin now goes out as a 1000 by 1500 card: your photo fills the top, and a calm band underneath carries the product name, the facts line (what it is, how many sizes, the inch range) and your shop name. It is built from the same photo and the same listing facts as the pin text, so nothing is invented, and the text on the image is something Pinterest reads too. Pins already posted keep their original image.
Approve a whole batch of pins at once
The social queue asked for one click per pin, which is fine for ten and a chore for a hundred, and a queue that runs dry means the scheduler posts nothing. The waiting list now has an Approve all button, plus one button per board (Approve 92 planters, Approve 14 vases) when the batch spans several. Nothing changes about what gets posted: it is still only what you release here, and rejected pins stay rejected.
Pins that Pinterest can actually find
The scheduler was posting bare pins: the product name as the title, one sentence underneath, and no alt text. A pin now takes its title from the listing's own title, the keyword-rich one you already wrote for search, trimmed at a phrase break so it never cuts mid-thought. The description is built from the listing's own variation labels: how many sizes, the inch range, the color names, plus your shop name and a nudge to tap through. Alt text goes out on every pin, using the photo's own alt when you kept one. Nothing is invented: a listing the mirror does not know still gets an honest, shorter description. Pins already posted are unchanged, since Pinterest does not allow edits after posting.
Refresh a set from its members, and a size guide that speaks for all of them
A product set made with 'Create a set' is a copy of its members, taken the day you made it. Its price already followed the members on its own, but its grams, hours, dimensions and measured interior did not, so a member you re-sliced later left the set quietly out of date. The set card on Sets & assemblies now has 'Refresh from members': it shows exactly which rows would change and by how much, then re-copies only those numbers. SKUs, names, sizes, stock and listings are never touched. And the planting guide for a set listing now reads every member at each size and lists the tightest, with a line explaining why one set of numbers covers all of them.
Reprints go to the front of the line
Clicking Reprint used to hand the new attempt its old place in the queue, which on a hand-sorted board meant the bottom. A reprint is the most urgent thing on the board: the order was already promised and a plate already failed. So a reprint now lands at the top of the print queue and the printer lanes, and if the part belongs to a project run, the whole run comes up with it. The order date, the waiting age and the buyer's cancel window are unchanged, and your next drag re-sorts everything as usual.
Save every matched draft in one click
A big re-slice can leave the drafts inbox holding dozens of products at once, each waiting for the same untouched save. The inbox now carries a 'Save all matched' button: it checks every pending group first, saves only the ones where every row updates a product you already have (matched printer and filament included), and runs them one at a time with a stop button and a plain report at the end. Anything that would create a brand-new product, or needs a hand pick, is held out and says why, so the one-click path can never mint a surprise.
One filament, every name it goes by
A physical filament collects names over time: the listing calls it one thing, an import spelled it another way, and sometimes the library ends up with two rows for the same roll. Two identical rows are worse than clutter, because order color matching sees two equally good answers and refuses to pick either. Now every color on the Filament page carries an 'also answers to' list, and any name on it matches orders exactly like the color's own name. And when two library colors really are the same filament, a merge control folds one into the other: its products, jobs, spools and stock move over, the duplicate deactivates, and its old names join the alias list so nothing ever stops matching.
Jobs that could share a plate
The queue now spots prints that could run together: queued jobs wearing the same colors whose measured footprints fit one printer bed side by side. A small hint above the queue names each group and the bed it fits, so you can load one plate instead of three. It only suggests what genuinely fits (real gaps, real bed margins, exact color match, multi-copy plates sit out) — start one, then use 'Start on that plate' on the rest and they finish together like any shared plate.
One plate, one panel
When several parts print together on one plate, the jobs board used to stack a full panel for every part: duplicate progress bars, duplicate cancel rows, and notes pointing you at 'the panel above' that you had to hunt for. Now only the lead part carries the finish panel. Every other part on that plate collapses to one slim line that jumps straight to that panel when you tap it, with its own progress and escape hatches tucked behind a small expander for the rare mid-print correction. Same one-finish safety, far less noise.
Review cards: a working door and a warmer ask
Two touches on the day plan's review cards. The respond-to-review card now opens the right place: its old link landed on Etsy's error page, and it points at your Shop Manager activity feed instead, where fresh reviews surface with their respond controls. And the review-request paste grew a closing line inviting the buyer to reach out with any questions or concerns so you can make things right, because a solved problem beats a public complaint. If you saved your own ask wording in Settings, yours still wins; the new line only rides the built-in default.
Two-color jobs know both their colors
A two-color product (a pot body with a contrast pattern, sliced multi-material) now carries both colors all the way through. The slicer feed records how many grams each color actually uses, so the product holds color 1 and color 2 with their real weights. A job for it wears TWO color chips on the jobs board: the primary and the accent, each a live picker you can switch. An Etsy order whose variation reads like 'Sage / Cream' sets both automatically: the first name is the body, the second the accent, and your product's saved accent palette fills in when a half doesn't match a spool. When the job finishes, each color's spool (and each color's filament stock) is decremented by its own measured share instead of one spool eating the whole plate. Single-color products are untouched everywhere.
One Filament page for colors and spools
Filament lived behind two doors: your color library (with prices, the thing the engine prices on) in Settings, and your physical spools (with tags and remaining grams) on the Spools page. Same category, two places to bounce between. The Spools page is now the Filament page, and it shows ONE list: every color is a row wearing its swatch, price per kilo, and its physical spools rolled up (850g across 3 spools, 1 loaded, weigh due). Expand a color and you get each physical spool with its remaining bar and where it's loaded, plus the same edit form Settings uses, right there. Spools never linked to a color collect in their own visible tail instead of vanishing. Adding a color searches the filament catalog; registering a spool still creates its color in one motion. Brands fold to a single line, wearing every color as a swatch chip and the brand's total grams on hand, and remember what you leave open. Loadout, the queue-coverage warning, and scrap analytics keep their spots. With everything living here, the old Settings Materials section is retired: the Workshop tab keeps your printers and points filament at its new home, and every link, import, and nudge that used to lead to Settings now lands here.
Plate ticks that stay ticked
Printing several parts on one physical plate means ticking the platemates when you mark the plate done, and until now those ticks lived only in your browser's short-term memory: navigate away and they reset. Now a tick is recorded the moment you make it, and the finish panel pre-ticks itself from the record when you come back, on any device. There's also a faster door: when a printer is mid-print, its queued jobs offer Start on that plate, which starts the job and records that they're printing together in one tap. Everything about the money stays exactly as it was: queued platemates you never ticked still start unticked, and the plate's real time and filament still split only across what you actually confirm at finish.
See your print queue by printer
A new By printer view on the jobs board splits the queue into one lane per machine: what each printer is running now, the plates waiting in its line, and roughly how many hours it has ahead of it. An idle machine shows an open slot, so free capacity is as visible as busy. Plates land in their lanes automatically from the printer each job already carries, and anything unassigned collects in its own lane with a picker right on the row, so filing it is assigning it. Every row wears its filament swatch, and tapping a row opens its details: color, order, grams, and a Full card link that jumps to the complete card. Best of all, you can drag a waiting plate onto another printer's lane to move it there — evening out two machines is a drag and a drop. One-printer benches keep the normal list; the toggle only appears when you run two or more machines. The list view and the lanes always agree on print order, and new work always joins at the bottom of its lane.
Fulfill an Etsy order from the shelf in one click
When a queued Etsy order's product already has a finished unit on your made-to-stock shelf, the green chip now comes with a button. One click records the sale through your Etsy shop at the order's real price, prices its cost at what the shelf unit actually cost you to make, takes the unit off the shelf, and clears the queued print from the board. It asks first, and it names the buyer's chosen color so you can check the shelf unit matches before anything moves. The order can never record twice: the receipt stays reconciled with the sync, a mixed order's other items still record together when they finish, and if the shelf empties or a part has already started printing, the button says so instead of guessing.
Listings drafted from Anvil are paired from birth
Draft on Etsy already knows which product you picked, so it now writes the pairing down the moment the draft is created instead of relying on the SKUs to carry the link. Pairings survive anything an outside tool does to the listing later: orders keep routing to the right product, and if something rewrites the SKUs you get the new warning instead of a silently unlinked listing.
Anvil now notices when something else rewrites your SKUs
An outside tool (a listing editor, an SEO pass) can replace a live listing's variation SKUs, and the SKU on a listing is what routes each order straight to its product. Until now that loss was silent on a paired listing, and an unpaired one just fell quietly back into Needs pairing. Now Insights raises a card the moment a listing that belongs to one of your products carries none of that product's SKUs anymore, naming the foreign SKUs it found. The SKU page shows the same warning on the listing's row, with the fix one click away: Sync sizes from catalog rebuilds the size rows and writes your SKUs back. Pairing survives outside edits, so orders keep routing through it while you heal the listing.
The price drift watch sees every size, not just the cheapest
Etsy's shop feed only shows each listing's lowest price, so the drift watch could only compare the bottom size: a listing whose smallest sat on target read healthy while its bigger sizes quietly fell behind. Now, whenever Anvil reads a listing's full inventory anyway (a sync, a stamp, a push preview, adding sizes), it remembers every size's live price, and the watch compares each size against its own target. A card can now say three sizes are under by two to fifteen dollars, name the widest gap, and date its evidence, and one push updates every drifted size after you confirm the old and new numbers per size. Listings whose prices have never been read this way keep the old lowest-size check until they are.
Real prints can now sharpen a product's priced grams and hours
When you type real print times (or weigh real filament) on finished jobs, Insights now compares them against the grams and hours each product prices on. Once three real prints inside your learned window disagree with the spec by more than five percent, a card shows the measured number next to the priced one, with the price move it would mean per sale, and one click updates the spec. Nothing is ever automatic: your slicer's numbers stay in charge until you click, the catalog re-prices from there, and the drift watch flags the live listing for a push as usual. Re-slicing a product replaces the spec with fresh slicer numbers and the old measurements retire with it. Untouched Done forms don't count as measurements, so only numbers you actually typed can move a suggestion.
Finish a mixed plate together, whatever's on it
Printing parts from different products on one plate (three stand sizes together, a lamp's parts beside a planter) used to mean each job recorded its own full time estimate, over-counting the machine's hours. The finish-together panel now sees every job printing on the same machine, not just parts of the same run: one panel per printer, tick what shared the plate, type the plate's real time (and optionally its real filament), and every ticked job takes its fair share. Queued parts of the same run can still be ticked without starting them; anything else joins the plate by being started, so a deep queue never floods the list.
Partner products stop asking for a filament
Adopting your partner-made listings gave the catalog a banner it didn't earn: every partner product counted as missing a filament, the banner offered to re-link them all to a spool in one click, and the summary read them as not yet priced. A partner product has no filament on purpose (a partner makes and ships it), so it now sits out the missing-filament count, the bulk re-link can never touch one, and the not-yet-priced figures only count products that actually price through your printers.
Every Pinterest board gets its turn
The social scheduler picked the oldest approved pin that wasn't in the last-posted category, which sounds fair and isn't: two big old pools (planters and vases) took every slot in turns while a younger category's pins (the orchid pots) never posted at all. The scheduler now walks your active boards in a cycle, so each day's posts spread across every category that has approved pins waiting, oldest first within each. Small and new categories post from day one instead of waiting weeks for the big pools to drain.
Adopting one partner format no longer hides its siblings
Adopting a partner-made listing (say, the mug of a multi-format design) minted the design's collection in your catalog, and every sibling format of the same design (the shirt, the tote) then quietly matched it by title and left the Needs pairing bucket, taking their Adopt buttons with them. Partner pairing is meant to be explicit: you adopt each format yourself, or pair it by hand. Now a partner product never wins a title match, so un-adopted sibling formats stay in Needs pairing where their Adopt button lives. Nothing about money changed: sales were always matched by your confirmed pairings, never by title.
A shopping list for boxes worth stocking
The box lineup told you which boxes get picked; now it also tells you which boxes to buy. Under each lineup in Settings, a Worth adding list names the few standard box sizes you don't stock that would earn their place: boxes that would give a home to products that fit nothing today, boxes that would pull a product's pick under the dim-weight cliff, and smaller boxes for products rattling around a size up. Each suggestion counts the products it would serve, says why, and names the box it would replace, capped to the handful worth buying a bundle of rather than every marginally better size. Purely a suggestion: prices only move when you actually add a box to the lineup.
Partner-made sales record themselves, at the partner's cost
The second half of partner products (print-on-demand: a partner makes, packs, and ships while you keep the margin). When an adopted partner listing sells on Etsy, the sale now records the moment the sync sees it — revenue at the Etsy price, cost at the partner's per-unit charge, fees frozen like every sale — with no print job queued and nothing touched on your shelf. It lands on History under its Etsy order number, and a mixed order (a planter and a tee together) becomes one order card: the planter queues to make, the tee is already recorded. Haven't typed the partner's cost yet? The sale still records, visibly unpriced; add the cost on Edit details and click Recost. Refunds reverse automatically like any Etsy order, and a partner sale never asks you to ship anything or restock a shelf that was never yours.
Your box lineup now shows which boxes actually get picked
A shipping profile's box lineup told you what you stock, but not what your catalog does with it. Each box in Settings now shows how many products auto-pick it, how many of those picks are snug (pack with care, no room to pad), and how many parcels land on it from two-parcel splits. Under the lineup, a rollup counts the whole 3D catalog: how many products pick from this lineup, how many keep a hand-set box, how many still price weight-based because no printed size is stamped yet, and, by name, any product that fits no box you stock. Buy more of the boxes doing the work, drop the ones that never fire, and add a bigger one when something is named as boxless.
Partner-made products get a home in your catalog
Print-on-demand listings — a partner makes, packs, and ships them while you keep the margin — used to clutter the Etsy SKUs page's pairing list with nowhere to go: pairing them to a regular product would have queued phantom print jobs the moment one sold. Now each of those rows has Adopt as partner product: one click reads the design and format out of the listing title, mints a catalog product flagged partner-fulfilled, and pairs the listing. Partner products stay off everything make-shaped — no print queue, no size ladder, no price-drift nags, no listing edits from Anvil, no shelf — and wear their own badge with the partner's per-unit cost once you type it. Recording their sales at that cost is the next build.
Handled orders stop haunting the review screen
Old Etsy orders you had already reconciled by hand kept coming back to the review queue no matter how many times you paired their listings — and moving your catalog onto the size ladder made more of them appear. The cause: the review list re-checked your entire order history on every visit but never asked whether an order was already handled, and an old order's original size wording can stop matching after a rename (correctly — the guard that keeps a renamed size from printing wrong). Now any order that's been imported, queued, or reconciled stays off the review screen for good. Review is for orders that still need a decision, not a memory of every order that ever needed one.
Pull product photos from Etsy with one click
Collection photos used to arrive by a hand-run ritual, so a listing you just published sat behind a dashed placeholder until someone remembered to run it. The Catalog's Data menu now has Pull product photos: one click fetches the hero image for every collection whose paired Etsy listing has gone live and doesn't have a photo yet, and tells you exactly what it added. Draft listings stay out on purpose — their photos are provisional until you publish — so the flow is publish on Etsy, click the button, and the collection has its face.
Original counts as one-size too, so those listings stop fighting the sync
A product sliced at its authored size gets the catalog label Original, and its listing usually says OS — two spellings of the same fact. The morning's one-size fix taught the tools OS but not Original, so on those listings the sync still left the catalog size out as not-a-size, treated every live row as having no catalog counterpart, and offered them all for removal. Now Original, Original Size, OS, and One Size are all the same size family: the sync matches those rows properly, reports in sync when everything lines up, and never proposes rewording OS to Original (or back) across your color rows, because that is churn, not a fix. Existing SKUs are untouched, each spelling keeps the exact code it was minted with.
Inside and Insert parts ship inside their planter too
The liner shipping rule learned the older names. A part called Liner already packed inside its planter on the shipping estimate, but plenty of lined planters name the pair Inside and Outside, and drop-in pieces are often called Insert or Sleeve — those were still being treated as loose parts that could trigger a second box. Now any part named Inside, Inner, Sleeve, Insert, or Liner nests where it actually ships: inside its vessel, one box, with its weight still counted. Names that merely contain those letters, like Spinner, stay structural.
OS is a real size now, so one-size listings sync like everything else
Stamping a one-size product OS put it on the migration board, but the Etsy tools still could not read that size. A listing whose Size dropdown said OS looked size-less to Anvil: Sync sizes from catalog answered that it could not read a Size variation, and Add missing sizes said there was nothing to append, even after you had given the listing its OS size. Underneath, the shared size vocabulary simply did not know the word. Now OS (and One Size) is a size in its own right, everywhere at once: sync reads an OS listing, heals its price and SKU across every color, and reports in sync when there is nothing to do; a buyer's order that says OS matches the OS size directly; and OS prices are never compared against real ladder rungs, so a lamp can share a price with a planter size without either being pushed apart. Existing OS SKUs keep their exact codes, nothing re-mints.
Liners ship inside their planter, and the shipping estimate knows it
A planter that comes with a drop-in liner prints as two parts, but it ships as one thing: the liner rides inside the planter. The shipping estimate used to treat the liner as a second loose part, which could trigger the two-parcel split (a snug box plus a liner meant two boxes and two labels on the estimate) or hand the liner a box of its own. Now a part named Liner is packed where it actually goes: it never forces a split, never gets its own parcel, and never decides a box size, but its weight still counts in what the carrier bills. Products without a liner part price exactly as before, to the cent.
See the planting guide before you draft a new listing
New Etsy drafts already went out with a planting guide built into the description, but you couldn't see it on the draft form until it landed on Etsy. Now Draft on Etsy shows the exact guide block, live, right under the description as you pick a product and edit its size wording. It's the same guide the draft actually pushes, added between clear markers so your own copy is never touched. And if a product has no measured sizes yet, the form says so plainly and tells you to slice it in Bellows first, instead of quietly sending a draft with no guide.
Stamp a size guide onto a live listing in one click
The planting guide that new drafts arrive with can now be added to a listing you already sell, right from the Etsy SKUs page. On any linked listing, Stamp size guide reads the live description, builds the guide from your catalog's measured sizes, and shows you exactly what it will add before anything changes. Confirm and it writes just the description, everything else on the listing is left alone, and it reads the listing back to make sure the block landed. It names the sizes the listing actually sells, using the listing's own size wording, and sits between clear markers so running it again refreshes the guide instead of stacking a second one. A vessel with no measured interior yet, or a vase (which gets its dimensions by hand), is told so rather than guessed at.
One-size products get their own place on the ladder
A lamp, a set, a one-off that only sells at a single size never rode the size ladder, so it sat in Off the ladder reading 0 of 9 forever, and syncing its one size to Etsy got tangled up with a nine-rung push that did not apply. Now the migration board recognizes a one-size product on its own: stamp its size OS in the catalog, and it moves into a new One size group. Each one reads done the moment that size is stamped and its SKU is live on the Etsy listing, and shows needs stamp and push until then. The nine-rung progress bar stays purely about multi-size collections, so your ladder percentage is never muddied by products that were never on it.
The ladder joins Workshop, and drafted listings get a go-live check
Two changes to your day's postures. Riding the ladder, slicing the next collection and running the pipeline, now files under the Workshop chip: it is shop-floor work even though a screen is involved. And a new Admin card watches the pipeline's finish line: when a freshly drafted listing is sitting on Etsy with its SKUs stamped, waiting only on you, the day says so. One card counts them all, a single waiting draft opens straight into its own Etsy editor, and more than one opens your shop's draft list. Look each one over, photos, copy, prices, then publish. The card clears itself as drafts go live, and listings still moving through the pipeline are left out on purpose, they already have their own place in the line.
New Etsy drafts arrive with a planting guide already written
When your pipeline has measured a vessel's interior, a new Etsy draft's description now ends with a planting guide built from those numbers: each size's opening, how deep the soil sits, how many cups it holds, and the nursery pot that drops fully inside, with the next size up noted as riding a little higher on purpose. The guide only names the sizes that listing actually sells, and where a matching Fits-Nursery version exists, in the listing or as its own listing, one line points buyers at the flush drop-in fit. It sits between clear markers at the end of the description, so your own copy above it is never touched and a future update replaces the guide instead of stacking another one. Products without interior measurements draft exactly as before, word for word. Tiny sizes too small to plant stay in the listing but are left out of the guide, on purpose.
Multi-copy parts now price the whole set on every money surface
A part saved with a copy count, say a planter whose three feet print as one plate row with quantity 3, has always priced correctly on the catalog card, in the quote builder, and on the job the queue writes. But two surfaces still priced a single copy: the seller dashboard's revenue guide, which stands in for the sale price when you did not type one, and the cost basis frozen onto a sale at record time. Sell a multi-copy product at its listed price and the dashboard could book a fraction of the real revenue against the full cost of making every copy, which read as a loss on a perfectly healthy sale. Both now price the whole set: filament and print time scale with the copy count, while per-plate costs like the color purge and handling stay charged per plate, so copies nested together on one plate are not overcharged. Single-copy parts are untouched, to the cent.
The drop zone can no longer fail silently
Two ways a dropped file could vanish without a word are now words. If a drop hands the browser zero files, which some zip previewers, download shelves, and unsynced cloud placeholders do, the estimator now says so and suggests dragging from a normal folder window or clicking to browse. And if a G-code file cannot actually be read, locked by another program, still being written, or too large for the browser, that failure is reported by name instead of quietly stopping the whole drop. Nothing changes for a good file: it stages and prices exactly as before.
Past the cliff, the smaller box always wins
For a product too big for any box under one cubic foot, the picker used to keep its half inch of padding and take the next box up. But past the cliff the carrier is billing the box, not the contents, so a snug fit in a smaller box is strictly cheaper: a 12.6 inch pot in a snug 13 inch cube bills just under 16 pounds where the padded 14 inch cube billed almost 20. The picker now makes that trade the same way you would at the packing bench, and says snug fit on the card when it does. Under the cliff nothing changes, because there the padding is free. The price watch's all-clear note also stopped promising only the under-priced direction when it watches both ways.
A full box is a full box: snug multi-part products now price their second parcel
This morning's box picker had one polite fiction left in it. When a product's biggest part fit its box snugly, the estimate still pretended the other parts squeezed in beside it. They cannot: snug means the box is full, with barely a finger's width to spare. Now the estimate tells the truth. When the picked box is a snug fit and the product has more than one sized part, shipping prices as two real parcels: the big part alone in its snug box, everything else in the smallest box that holds it, each parcel billed on its own size and weight, and the base postage charged twice, because two labels is what you will actually buy. The card spells it out: which part fills which box, and what each parcel bills. A hand-set box count or box size still wins, and products that fit their box with proper padding are unchanged.
Anvil suggests the shipping box, warns you off the dim-weight cliff, and knows when to split
Carriers stopped billing light packages by the scale a while ago, and in July USPS turned the screw again: any box over one cubic foot is billed by its volume, at a stingier divisor, while a box at or under that line still bills by actual weight. That one cubic foot is a price cliff, and a 3D print that fits a 12 inch box ships for a third of what the same print costs in a 14 inch box. Anvil now reads the printed size your slicer already stamped on every product and says which standard box it ships in, with half an inch of padding on every side, and it is honest when a snug fit is what keeps you under the cliff. Products that cross the line get a plain warning with the real billed weight. Multi part products get the trick we learned the hard way: when one big box would bill as twenty dim pounds, the card shows the split, this part in its own box plus the rest in a second, two cheap weight billed labels instead of one expensive one. If you stock your own boxes, add them to your shipping profile, or take the standard set with one click, and every estimate then prices with the exact box it picked, using that box's real empty weight instead of a flat packaging guess. Shipping profiles also learned the carriers' shapes: mark a profile as USPS style and dim weight only applies past the cliff, while UPS and FedEx style applies it to every package. Profiles without boxes price exactly as before, to the cent.
Your day knows the night, names the run-out date, and fills the quiet
Three more ways your day watches out for you. When a long plate is scheduled for the evening, the top of the page now says so: one overnight plate to start before you stop, so the printers work while you sleep. When a material is running down, the reorder line now names the date: at your recent pace it runs out in about six days, with the day of the week, worked out from what your jobs actually consumed. And when nothing is chasing you, a clear day offers one honest suggestion instead of going silent, like the collections still missing a product photo, which is exactly what the pin queue will want. The morning email got the same news: prints that finished overnight lead it, a failure is called out first, and the drafts waiting at the front of your pipeline close it.
A shipped order is never called late for missing paperwork
If a parcel had already left but its postage cost was not typed in yet, your day still showed it as Pack and ship, and eventually flagged it Late. That was a wrong accusation: the work was done, only the number was missing. The board now knows the difference. An order Etsy says has shipped becomes a quiet Log the postage line that can never read late, sorted below your real packing work. And the packing rows got smarter: when Anvil can work out an order's real ship-by date, from when the buyer ordered and the processing time the listing promised, the row says ship by Wednesday and only turns Late when that day has actually passed, on your own clock. An order sold ages ago with time still on its clock stops being nagged about, and one due tomorrow rises to the top.
Your day starts at the pipeline's front door, and looks the part
PrintPilot and its cousins now read the whole pipeline. A fresh Etsy draft with no catalog product yet can be the first line of your morning: queue its run in your slicer, with the rest of the line counted behind it. The page also says how many drafts are waiting at the front door, and when there are none it says that too, so a quiet queue explains itself. Anything you skipped on the size ladder stays skipped here. The page itself got a new coat: your day's name up top with the date and a one line read of the day (done so far, time booked, when you are clear), a progress bar that fills as you tick things off, an Up next marker on the first thing still waiting, and clearer urgency colors on every line.
The size ladder starts where your pipeline does
An Etsy draft with no product in your catalog yet is the real start of the pipeline, and until now Anvil could not see it: the ladder's ride is ordered by catalog collections, so a fresh draft was invisible until someone built the product by hand. Each unpaired Etsy draft now gets its own entry at the front of the line, carrying the first steps as they actually happen: slice it, promote the drafts, pair the listing. The entry knows exactly which listing it is from birth, so when you reach the pair step there is no guessing. Once paired, it hands off to the ordinary collection ride for sizes, prices and stamping. Every entry in the line also gets a Skip button that pushes it to the back and remembers on this device, with a shelf at the bottom of the card to take one back. And a shared first word is not an identity: a new Pearl vase draft will not be matched to your Pearl planter collection just because they share a name.
The size ladder spots a draft that is already waiting on Etsy
When a collection has no paired Etsy listing, the ladder's pair step used to offer one door: draft a new listing. If a draft for that collection was already sitting on Etsy unpaired, following that button made a duplicate. The step now notices an unpaired draft whose name leads with the collection's own word, names it, and offers a second door straight to the SKU page to pair it. Both doors stay open and nothing pairs itself: a name match is a hint, and you make the call. Pairing a listing on the SKU page now also counts as paired right away, instead of only after its SKUs are stamped.
Change the size on a job when a buyer upgrades
Somebody orders a large, then asks for the extra large. The jobs board could change the color and the printer but not the size, so the job stayed pointed at the wrong product. There is now a size picker on a queued job, and it re-works the expected grams and hours from the new size. A multi part product moves every plate together or it does not move at all, because a box with one wrong sized piece in it is worse than either size on its own. It only offers sizes that actually have all of your parts.
Your queue says how big each size is
The catalog has read L 6 inch since the end of July, after a print came out at 8 inches when 6 was wanted. The jobs board still just said L, which is the screen you are looking at when you load the plate. Every job and project on the board now carries its inches, worked out from your own ladder, and a size we cannot vouch for still shows nothing rather than a number you cannot trust.
Orders show who bought them
Etsy has always told us the buyer's name and Anvil never read it, so 40 of your orders showed a bare number on History while the ones you had linked by hand showed a person. The sync now reads the name, and every order you already had has been filled in. You look for a parcel by person, not by reference.
An on time shipping figure of your own
Etsy publishes no ship by date, so this used to be its number or nothing. It turns out both halves of a deadline can be read: the day an order really shipped, and the processing time each listing promises, which is not the same on every listing. Your day now shows our own on time figure beside Etsy's, worked out from those two. It never counts toward the badge, because that is Etsy's arithmetic, and orders we cannot judge are left out and counted out loud rather than quietly rounded up. A cancelled order is not a late one.
Where you stand on Star Seller, without pretending
Your day now shows the five Star Seller criteria for a connected Etsy shop. Two of them Anvil can work out properly: your average rating comes from your real reviews, and your order count and shop age come from your own recorded sales, so your shop age is exact instead of a guess. Etsy publishes no way to read your message response rate or your on time shipping, so those are yours to type in from Shop Manager, with the date you read them, and the panel tells you when they are getting stale. Every figure says whose number it is. Anything nobody can answer yet reads as not known, never as a confident 100%.
The color and printer pickers stop showing a change that did not save
If a job finished while you had the jobs board open, picking a new color or printer for it looked like it worked and silently did nothing. The board now refreshes so you see the real state instead of a choice that was never stored.
A scan that did not land now says so
Spool scans queue up when the connection drops and replay when it returns. A scan the server refused was quietly dropped, so the pending counter reached zero whether every scan landed or none did. Refusals are now kept and shown, and they tell you which kind of problem it is: sign in again, or the spool or printer changed on another device.
The restock nudge points where it can actually help
For a filament color you track with real spools, the one tap Ordered plus 1 kg button on your home screen could never clear its own nudge, because that nudge counts the spools you physically have. Those colors now send you to Spools, where registering the spool you just bought is what really clears it. Colors without spools keep the one tap button.
Your size answer decides the inches, not the product's name
A letter size means different inches on the two ladders: S is 4 inches by width and 5.5 inches by height. When Anvil wrote sizes onto a listing, it guessed which ladder you meant from the product's NAME, so anything with "vase" in it published the height inches. That is wrong for a vase you deliberately sized by width, and it published a size the product is not. Every place that writes sizes to a listing now reads the width-or-height answer you saved on the card, and only falls back to the name if you have never answered. If you have ever wondered why a listing showed inches you did not recognize, this was it.
Clearing a size lens no longer forgets your other answers
Handing a collection back to the heuristic used to wipe the whole saved row, which quietly took your "this part names the size" answer and your "this one is not a ladder product" answer with it. It now clears only the width-or-height answer and leaves the rest alone.
Give a one-size listing its whole size range
Some listings were built back when a product only came in one size: a row of colors, one price, no size options. Adding sizes to one of those used to be a job for Etsy's editor, because it rebuilds the listing rather than adding to it. Anvil can do it now. It shows you exactly what changes first, including that the single price it sells at today is replaced by your catalog's prices for each size, and your colors keep their swatches and photos. Nothing is written until you say so.
Get a listing right before it goes live
If you build your Etsy listings as drafts first, putting SKUs on one used to count for nothing: the size ladder still refused to reconcile until the listing was live, which is backwards. Stamping a draft now counts, so you can square a product away and publish something already correct. Your progress bar still tracks live listings only, since that is what buyers can see.
Tell it which part is the size
A multi-part product gets its size from its main part, which Anvil picked as the heaviest one. That is usually right, but a base or saucer can outweigh the body it belongs to, and then the whole collection gets measured off the wrong piece. Beside the width/height switch you can now say which part names the size, and it sticks.
Width or height is your call now
The size ladder tool has a "Sized by width / height" switch, but it only changed what you were looking at: underneath, Anvil kept deciding for itself which one a collection was really sized on, and it guessed from the name. That went wrong for anything shaped unexpectedly, like a vase that's sized by how wide it fans or a bowl that's twice as wide as it is tall, and a collection could quietly drop off the list because the guess said it was already fine. Now the switch sticks. Whichever one you pick is what the cards, the next-up card and the reconcile all use, until you change it. Also fixed: if your slicer renamed a single-part product's part between runs, the re-slice used to sit beside the original instead of merging into it.
A clean SKU when a sliced product joins your catalog
When you promote a sliced product from the drafts inbox, its catalog SKU is now built from your shop code, the product name, and the size (like DW-TOLP-XXS), instead of carrying whatever the slicer named the part file. A messy part name used to produce a messy SKU that could run past Etsy's 32-character limit. Your own typed SKU still wins if you set one, and re-slicing a product you already promoted leaves its SKU exactly as it is, so nothing an order relies on ever moves.
Tick every leftover row at once
When you sync a listing's sizes, any row with no catalog counterpart is listed for you to tick if it should come off the listing. A collection coming off the old size wording can leave dozens of them, and ticking each one by hand was most of the job. There's now a "Tick all" next to that list, and a second click unticks them. It only appears with more than a couple of rows, and nothing is ever ticked for you: removing a row takes that option off your live listing, so the choice stays yours.
The ladder ride stops bouncing you back and forth
The ride's last three steps (stamp the SKUs, add missing sizes, sync the sizes) all live on the same listing card, but each one used to send you back to the ladder, which then sent you straight back to that same card for the next one. Now the glow just moves to the next control where you already are, and the ride only returns to the ladder once the last of them lands. The page also scrolls to the buttons rather than the top of the card, so the work is under your cursor when you arrive instead of a scroll away.
Rename a part once, every size follows
A part is the same physical thing in every size, so its name is really a fact about the collection, not about each listing. Renaming one meant opening every size and typing the same word again. There's now a "Rename a part across every size" line on each collection: pick the current name, type the real one, done. Only the name moves. SKUs, listings and job history stay exactly where they are, so nothing on your shop needs touching. Handy if old products are still carrying a placeholder name from before their files had proper part names.
A listing tool that stalls now says so
"Sync sizes from catalog", "Add missing sizes" and "Push to Etsy" could sit on their working label forever if the request never came back (a slow Etsy call, a dropped connection, a deploy landing mid-click). The work had stopped, but the button had no way to tell you, so the only way out was a reload. Those calls are now caught: you get a plain line saying it never came back and that nothing was written, and the button is ready to click again. The ladder ride's sync step also narrates its legs (reading the listing, recording the pass, heading back) instead of showing one frozen message through all three.
Some products just don't take a nursery pot
A vase is excused from the nursery step automatically, but a box, a bowl or a lamp looks like a planter to any rule we could write, so the ride kept asking them for a nursery run that was never coming. There's now a one-click "Doesn't need one" on that step: the collection is marked, the step disappears, and the ride finishes. You decide rather than a name pattern, because names genuinely can't tell (a Pot might well take nursery sizes). Undo any time.
Nursery sizes can live on the same listing as the rest
A planter and its nursery-pot sizes used to be two products and two listings, which meant two of everything to photograph, write, and keep in sync. They can now be one: the nursery sizes sit in the same collection as the letter sizes, and the ride's last step puts them on the SAME listing instead of asking you to draft a second one. Each family still prices on its own ladder, and the size dropdown keeps the letters first and the nursery sizes after. Nothing forces the change: a collection that still has a separate nursery companion keeps working exactly as before.
The ladder ride waits for the whole run, then takes you to it
While a ride waits on a slicer run, the waiting card watches for it: the page checks every 20 seconds and refreshes itself the moment drafts (or doesn't-fit skips) reach your account. It knows which sizes it is owed, so it waits for the whole set instead of the first arrival, shows the progress ('2 of 4 missing sizes are in, still slicing M and XXXL'), and then takes you straight to the drafts inbox. It goes by whether the run has stopped delivering, not by which collection is on screen, so a batch that finishes a different product (or a planter's nursery family) still brings you over once it is done. Deliberately slicing a partial run? A quiet link opens what has already landed.
A collection that was never listed on Etsy reconciles freely
The wrong-size guard demands stamped SKUs before a rename can shuffle size words, because a live listing's buyers pick by the old words. But a collection your shop never listed can't take an Etsy order at all, so there is nothing to misroute — and the guard was still demanding stamps that had no listing to land on. It now checks the shop's whole listing mirror (every state) for real exposure: a shared SKU, a confirmed pairing, or an unaccounted listing leading with the collection's codename. Zero exposure opens the guard and the Reconcile button lights up. Careful by design: a same-codename sibling only counts as accounted for when it is pinned or SKU-matched to its own collection, and any mystery listing that answers to nobody keeps the guard closed.
Sizes now keep at least two dollars between them
The size-price separation guard bumps a tied or inverted larger size up so every size posts strictly above the one below it. The minimum step between sizes is now $2 instead of $1: a bigger size should read clearly bigger on the sticker. Everything else about the guard is unchanged — bump-up only, the smallest size never moves, naturally distinct prices are untouched, and nothing writes to a listing without your confirm.
A size that can't print stops blocking the ladder
Some sizes physically don't fit any of your printers (a 12 inch box on a 350mm bed), so the slicer skips them and the ladder ride used to wait forever on a rung that could never exist. Each missing rung on the ride card now has a one-click 'doesn't fit' control: the size leaves that collection's ladder, the counts read honestly (8 of 8, with the exclusion noted), and the ride moves on. Undo any time. The slicer pipeline can also report these skips itself, and a size that later slices successfully (hello, bigger printer) reopens on its own.
The ladder ride ends with prices verified current
Adding missing sizes puts the new rows on at today's prices, but it never re-prices the rows already on the listing, and the ride used to count an add as good enough. Now only a full sync satisfies the final step, and it has to come after any adds: a finished ride means every row on the listing was rebuilt to your shop policy. A sync that finds nothing to change records the clean check and sends you back to the ladder with a verified note instead of making you read an empty preview.
The ladder lands you on the exact card, glowing
Following a ladder step to the Etsy SKUs page used to drop you at the top of the full listing wall. Now the ride carries its target through: the page scrolls straight to the listing you're working, rings it, and the exact control that step wants clicked (Stamp, Add missing sizes, or Sync) glows so there's no hunting.
A one-size listing can't trap the ladder line either
Some listings sell every size under one price with no Size dropdown at all, marked with the sells-one-size pin. On those, stamping SKUs narrows to the pinned size, so the other word sizes can never be stamped and the wrong-size guard would hold the reconcile forever: the Stamp SKUs first button was a dead end you could click all day. The ride now recognizes that shape: the step says the real move (give the listing a Size variation in Etsy's editor, then stamp), counts as a wait, and the collection rides at the very back of the line with the other Etsy fix-ups instead of blocking your next click.
A deactivated listing waits at the back of the ladder line
Stamped SKUs only protect orders on a live listing, so when a collection's rename is guard-held and its Etsy listing is deactivated, stamping alone can't unlock it: the real remaining move is on Etsy, finishing the listing and turning it back on. The ride used to park those collections at the front telling you to stamp SKUs you may have already stamped. It now reads that state for what it is, a wait: the step says reactivate the listing on Etsy (and that the reconcile unlocks after the next sync, since Etsy's index can lag a reactivation by about fifteen minutes), and the collection sinks behind ones with a real one-click next step, right beside the reslice waits.
Finish a ladder step and land back on the ladder
Ride buttons used to be one-way: click Add missing sizes or Sync from the ladder, land on the SKU page, do the thing, then find your own way back to see the next step. A ride button now marks its trip, so the page it opens shows a Back to the ladder link at the top, and the moment an Add missing sizes or Sync confirm lands, it heads back to the ladder on its own so the next step is right there. Stamping stays put on purpose (its skipped-size questions are answered on that page), and a created nursery draft offers the way back next to the open-in-Etsy link instead of yanking you away from it. Arrive at those pages any other way and nothing changes.
The ride knows a between-rungs size is reslice work, not a button
Some old sizes physically sit between ladder rungs (a 4.7 inch vase on a 3.5 and 5.5 ladder), so the reconcile tool correctly refuses to guess which rung they meant. The ride used to park those collections at the front of the line telling you to click Reconcile anyway, which could only say no. It now reads an all-refusals plan for what it is: reslice work. The step says so plainly (reslice at ladder sizes in your slicer; the old off-rung sizes stay your call to keep or take down), counts as waiting, and the collection sinks behind ones with a real one-click next step.
Sync can now remove old leftover rows, but only the ones you tick
A listing can carry rows the catalog no longer claims: old sizes from before a restructure, sometimes disabled in Etsy's editor but still sitting on the listing. The sync preview always listed them as left alone, on purpose, because a row the catalog doesn't recognize can also be a REAL size you still sell under older wording, and deleting those by guesswork is how wrong-size orders happen. Now each left-alone row in the preview carries a checkbox: tick the ones you know are stale leftovers and the sync drops them in the same confirm, audited like every other change. Nothing is ever pre-checked, unticked rows keep round-tripping byte-identical, and a row that turns out to match a catalog size between preview and confirm heals instead of deleting.
Drafting a listing checks the ride off instantly, with the product pre-picked
Two rough edges from the migration ride's first real lap. First: creating a draft on Etsy didn't satisfy the ride's nursery step until the next hourly sync mirrored it, so the card kept telling you to do the thing you just did. The draft tool now records the new listing itself the moment Etsy confirms it, so the step checks off right away and the ride moves to the next collection. Second: the ride's draft button dropped you on the Draft-on-Etsy page with an empty product picker. It now arrives with the right product already selected; the picker and the template listing stay fully yours to change.
The drafts inbox catches a renamed product before it duplicates
Rename a product folder in your slicing pipeline (or spell it differently from the catalog) and the next run arrives under a name the catalog doesn't recognize: saving would quietly mint a whole new collection beside the original, because a save matches by SKU and generated SKUs follow the product name. The inbox now spots the near miss before you save: when a run's name is one letter off an existing collection (Bamboo vs Bambu), the group wears a warning naming both and the clean path through (rename the old collection to the pipeline's name first, save, then reconcile marries the twins). Deliberately careful about your catalog's real near-name products: an exact name match never warns, a different word count never warns, and one-letter neighbors like Coil and Coin only meet the warning if a brand-new run arrives under a third name near one of them.
A bigger size never posts at the same price as a smaller one
Two neighboring sizes can cost nearly the same to make, and the sticker rounding then lands them on the identical price - which reads to a buyer like a mislabel. Every tool that writes prices to a live listing (price push, sync sizes, add missing sizes, new drafts) now runs the size ladder through a separation pass: walking smallest to largest, a size that ties or undercuts the one below it bumps up by at least a dollar, re-rounded to your sticker style, and the bump ripples so the whole ladder climbs. Bumps only ever go UP, the smallest size never moves, and prices that are already distinct are left exactly alone - the guard fixes what reads wrong, it does not spread your prices apart. Word sizes, inch sizes, and nursery sizes each climb their own ladder. As always, nothing writes without the preview showing you every old and new price first.
Draft and deactivated Etsy listings now show up in the tools
The listing mirror only saw your ACTIVE listings, so an unpublished draft (a nursery listing waiting on its title and description) or a deliberately deactivated listing was invisible: the SKU page couldn't pair or stamp it, and the migration ride kept asking you to draft a listing that already existed. The hourly sync now also mirrors drafts and inactive listings, each marked with its state. The SKU page lists them with a small draft or inactive chip so you can pair, stamp, and sync them like any other row, and the ride's nursery step counts a draft as done: the process happened, publishing is your call. The safety lines don't move: the wrong-size guard, the price-drift watch, and the scoreboard's listing axis still trust only live listings, because a draft's SKU rides no real order and its price drifts at nobody.
The migration ride: a guided step-by-step for every collection
The ladder migration bounces each collection across four pages, and knowing where you left off lived in your head. The size-upgrade page now opens with a ride card: it picks the next collection to work, shows every step of its loop with green checks (reconcile the words, reslice, QC the drafts, stamp SKUs, add missing sizes, sync wording and prices, the nursery line), and puts ONE button on the current step that lands you in the right tool. Waiting on a slicer run? The card says so, and a 'next in line' panel preps the following collection's file drop (the part names to match, the sizes to slice, whether a nursery run is owed) so the printer never waits on you. Nothing is saved or tracked by hand: every step is read live from your catalog and listings, so closing the tab IS saving, and coming back resumes exactly where the data says you are.
Storefront, ladder, and nursery achievements
The whole Etsy machinery arc (SKU stamps, size syncs, price pushes, add-missing-sizes) and the ladder migration itself now award badges. Storefront counts the listings each tool has touched, The Ladder counts collections brought fully onto the size ladder (with Master of the Forge waiting at the end for a complete catalog), and Nursery counts your nursery lines. All earned live from work already recorded, and the categories only appear once you've started that work.
Every catalog navigation link joins the escape hatch
The amber 'tap again' rescue for a stuck navigation only covered the sidebar and one back link - the catalog's top-corner buttons (Back to catalog, Build a quote, Draft on Etsy, Draft a new listing) and the new pipeline strip pills were ordinary links that could still silently queue behind a jam. All of them now pulse when tapped and offer the same force-through after ten seconds, so no matter which link you grab, you can always see it landed or push past a wedge.
The ladder tools get their own strip, and a refresh button
The four surfaces a collection bounces between on its way onto the size ladder - the drafts inbox, the ladder tool, the Etsy SKUs page, and Draft on Etsy - now carry a shared pill strip, so hopping between them never needs the sidebar. And each page has a one-tap Refresh: when your slicer pings that a run finished, one click re-reads the page in place (no full reload, no losing your spot) and the fresh drafts or numbers appear.
The ladder scoreboard now watches Etsy too, and links you there
The size-upgrade scoreboard tracked the catalog's side of the migration but not the listing's - you carried 'stamped but not synced yet' in your head. Each work-list line now also reads 'listing 3/9': how many of the collection's sizes a live Etsy listing actually carries SKUs for, measured exactly the way order matching trusts. Catalog ahead of the listing means the SKU page still owes a stamp, add-sizes, or sync. And every collection name is now a link that opens the Etsy SKUs page pre-filtered to that collection's listings - no more scrolling two hundred rows to find the one you're working. Two pages, one glance, zero memory required.
The drafts inbox picks filament by type, like the estimator
The draft products inbox listed every spool in its filament picker, but the price math pools by material TYPE - every PLA spool produces the identical estimate, so fifteen color options implied a choice that didn't exist. The picker now reads PLA / PETG / and so on, exactly like the drop estimator's: one entry per type, your most-printed type pre-selected, and the saved product points at that type's workhorse spool. Numbers don't move; the picker just stops asking a question the math never asked.
The drafts inbox catches renamed parts before they duplicate
Your slicing pipeline names a product's parts after its files - and if those names drift from the catalog's (the run says Pot and Plate, the catalog says Top and Bottom), saving the drafts quietly duplicates every size instead of updating it, and the ladder tool can't pair the copies afterward. The inbox now spots this before you save: when a run's part names share nothing with the catalog's for the same sizes, the group wears an amber warning naming both sets and the durable fix (rename the part files in your pipeline's product folder, then reslice - renaming in the inbox works once, but the next reslice flips it back). Single-part products and genuine part additions stay quiet.
The ladder tool understands a reslice that came early
If a reslice landed before a collection was reconciled, the old word sizes and the fresh letter sizes sat side by side - and the wrong-size guard would refuse to reconcile until every size was stamped, including the letter twins that exist only in the catalog and so could never be stamped. A dead end. The guard now understands that a size the reconcile itself deletes (a twin being absorbed into its original) can't take an order and doesn't need a stamp. And when the remaining blockers are catalog-only letters, the banner now spells out the way through: stamp the word sizes, use Add missing sizes to put the new rungs on the listing, then reconcile. The guard is otherwise exactly as strict as before.
The size ladder gets a progress bar
Moving a whole catalog onto the size ladder is really three jobs per collection: rename the old word sizes to letters, reslice for the full run of sizes, and add the nursery line. The size-upgrade page now opens with a scoreboard that tracks all three at once: a bar showing done vs needs-a-reslice vs needs-reconciling, and a collapsible work list per bucket with each collection's rung count (3/9) and whether its nursery line exists yet. Products that don't belong on the ladder (lamps, sets) are listed separately and never counted against you. One glance answers 'how much is left' instead of a hand count.
A reslice can't duplicate a product anymore
Reslicing a collection that was already on the letter ladder used to leave twins: the promote couldn't match the new run's SKUs to the stamped ones, so S, L, and XL each ended up with two rows - and the catalog read each pair as a two-part product, so queueing one would have printed both. The ladder tool now recognizes the pattern: the established row keeps its identity (SKU, listing links, job history), takes the fresh slice's numbers and name, and the twin is absorbed. The next reslice updates the survivor directly.
Vases get their own size ladder
The ladder tool used to refuse every vase: their heights (5.5, 7.5, 9.5 inches) sit between the planter rungs, which measure pot width. It turns out the vase line was already authored on its own clean 2-inch ladder, so that ladder is now official: 3=XXS, 3.5=XS, 5.5=S, 7.5=M, 9.5=L, 11.5=XL, 12.5=XXL, measured by height. Collections sized by height check the vase rungs, so a standard vase reconciles with simple letter renames (Small to S) that keep their meaning - no wrong-size risk, no reslicing. The Forge's size labels carry the same map, so a future vase reslice at a ladder height wears its letter automatically.
Size ladder holds back a rename that could ship the wrong size
Moving a collection onto the ladder often shuffles the size words around: your 6 inch "Medium" becomes L, and your 8 inch "Large" becomes XL. Your Etsy listing still shows the old words until you sync it, and the old words and the new letters mean the same thing to the order matcher, so a buyer picking "Large" could have been matched to the row that used to be Medium. A SKU always outranks the size word, so a stamped listing was never at risk. Now Anvil checks: if a rename would shuffle the words and the listing has no SKUs, Reconcile is held back and tells you exactly which pick would land on which size, with a link to stamp them first. Renames that keep their own meaning, like Small to S, are unaffected.
Size ladder: a tray no longer blocks a whole size
The ladder upgrade tool kept leaving sizes alone with a note like "the Flat Base part's footprint 7.5in sits on no ladder rung", even when the planter itself sat dead on a rung. The reason: every part had to land on a rung, and a tray, base, or saucer is naturally a different width from the body it belongs to, so one of them vetoed the whole size. Now the size is named by its main part (the heaviest, the same part whose SKU speaks for the variant on Etsy) and the rest follow it, so a size still moves whole or not at all. Sizes that genuinely sit between two rungs are still left alone on purpose: guessing which way to round is how a listing ends up selling the wrong size.
Sync a listing's sizes from the catalog in one click
Hand-editing variation rows in Etsy's editor is where migration mistakes happen: a SKU pasted onto two rows, a 10 inch wording left on a different rung's SKU. The SKU page's linked rows grew Sync sizes from catalog: Anvil reads the live listing and rebuilds its size section so every row carries the ladder wording with its inches (editable before you confirm), the right SKU, and your posted-price policy price, with colors preserved exactly. The preview shows every field moving old to new, flags provable duplicates for removal, and leaves anything it doesn't recognize untouched with the reason. It doubles as a truth check: zero changes means the listing is proven in sync. Nothing writes until you confirm, and every sync lands in the same audit ledger as price pushes.
Size ladder upgrade: whole sizes only, and vases measure by height
Two fixes to the ladder upgrade tool from live use. First, a size could show a rename for one part while its sibling part (whose dimensions didn't land near any rung) stayed behind — applying that would have split the product in two. Now a size only ever moves whole: if any part of it can't be placed, the whole size stays put and the reason names the part. Second, vases size by how tall they stand, not how wide they sit, so reading their footprint misplaced every one. Each collection now has a Sized-by toggle (width or height) that switches the preview instantly; collections with Vase in the name start on height. Renames also read one line per size now, listing the parts moving together.
Saving a draft no longer freezes the inbox
Saving a draft product to the catalog could leave the page unresponsive for seconds: every pipeline render in the inbox (60 KB and up, each) rode along inside the page and again inside every save's response, so a full inbox meant megabytes of payload per click. The renders now load lazily through their own image route and the inbox list ships without them, so saving a draft comes back fast and navigation stays live. Same treatment the catalog got for its thumbnails.
SM is its own size now
The size vocabulary used to read SM as an abbreviation of Small, so a catalog carrying both an S and an SM had two sizes sharing one rung: they could group together on a drop, generate colliding SKU codes, and read as ambiguous to every size matcher. SM now stands on its own step between S and M (it's the 4.5 inch rung on the size ladder), with its own SKU code and its own place in every sort. Plates named SM group apart from Small, Etsy size matching treats them as distinct, and Add missing sizes can now add an SM row instead of skipping it as ambiguous.
The main part's SKU fronts each size
A multi-part product's size variant carries one SKU on Etsy, and Anvil used to pick whichever part the database returned first — which could put a drip tray's SKU on the listing row while the planter itself sat unnamed, leaving buyers wondering why their order says TRAY. The pick is deterministic now: the heaviest part (by slicer weight) fronts its variant, so the main body's SKU is the one stamping writes, drafts carry, and Add missing sizes uses. Rows already stamped keep their SKU (stamping never overwrites); hand-edit any tray-fronted row in Etsy's editor if the wording bothers you — either SKU still routes orders to the right size.
Grow a live listing's size ladder in one click
When the catalog gains sizes an Etsy listing doesn't sell yet (the listing offers 3, 6, and 8 inch while the ladder now runs 4, 5, 10, and 12 too), the SKU page's linked rows grew an Add missing sizes button. Anvil reads the live listing, works out which catalog sizes are absent, and shows exactly what it would add: every existing color times each new size, priced at your shop's posted-price policy, SKU'd, with buyer-facing wording you can edit before confirming. New rows slot into the dropdown in size order, existing rows aren't touched, and anything unreadable or unpriced is left out with the reason spelled out. Nothing writes until you confirm, and every addition lands in the same audit ledger as price pushes.
The drift queue shows all of it
Price-drift cards were capped at five, biggest gaps first, with the rest waiting for you to clear one — fine when Insights was a single long list, but the drift category now has its own page and a shop with a posted-price policy can have a deep backlog. The cap is gone: the Price drift tile counts every drifted listing, and its view lists the whole queue sorted by dollars left behind, each with its push button. Work it top to bottom or cherry-pick; nothing hides anymore.
Skipped SKU rows can be resolved by hand
Some Etsy size values name no single size a matcher could ever read: a variety set like 'Set of 3 Variety' or a mixed trio. Those rows skipped during SKU stamping, and Etsy's own listing editor exposes no per-variation SKU field to fix them manually. Now a stamp result lists each skipped size value with a picker: tell Anvil which catalog variant it is, click Write SKU, and the SKU lands on Etsy and the catalog through the same stamping machinery. One answer covers every color row sharing that value, and the matcher never guesses on its own — a natural size match always wins over the manual answer.
The pairing picker shrinks as you pair
Pairing Etsy listings to catalog products meant scrolling a dropdown of every product in the catalog, including ones already paired elsewhere. The picker now leads with the products not yet paired to any listing, and sinks the already-paired ones into their own group at the bottom (still selectable, since a product can legitimately appear on more than one listing). The unpaired pool shrinks with every pairing, and when it runs dry you know the remaining listings have no catalog counterpart yet.
Etsy drafts price at your posted-price policy
Draft on Etsy priced each size at the bare suggested price, but a shop that bakes shipping into posted prices or runs a standing sale markup posts stickers above that, so a fresh draft would have needed an immediate price push to land right. Draft prices now apply the shop's posted-price policy (the same basis the drift watch compares against and pushes default to), with a note on the form saying exactly what's included. A shop with no policy set drafts at the bare suggested price, unchanged.
Etsy drafts speak human sizes
Catalog size codes are filename-safe ("N4p6in", "3p5in", "SM") and read as gibberish in an Etsy size dropdown. Draft on Etsy now prefills buyer-friendly wording instead: a nursery size becomes "Fits 4.6 inch Nursery Pot", a ladder letter shows its inches too ("S (4 inch)"), and a plain inch code becomes just the measurement. Every label stays editable before you create the draft, and because drafts carry SKUs and order matching reads the SKU first, the wording is pure presentation: no label choice can misroute an order.
Etsy orders match by SKU first
Every Etsy order line carries the SKU of the exact variation the buyer chose, and Anvil now reads it before anything else. On a stamped listing an order resolves straight to the right catalog product and size with no title guessing and no size-label reading, which makes matching immune to listing wording, renamed sizes, and lookalike titles. Unstamped listings match exactly as before, and an ambiguous SKU (one code claimed by two products) is refused rather than guessed.
A tool for moving old word sizes onto the size ladder
Shops restructuring their sizes around a bigger printer hit a naming clash: on the new ladder the same words mean different inches (the old Large was 8 inches; the new L is 6), so old and new labels can't safely share a catalog. The new Size ladder upgrade tool (catalog Data menu) reads each part's real sliced footprint and moves old word sizes onto their true rung: 4 inch becomes S, 6 inch becomes L, 8 inch becomes XL. When you've re-run a product through your slicer, the original row absorbs the re-run's fresh numbers and keeps its SKU, listing links, and job history, so nothing on Etsy or in your books moves. Anything that doesn't line up cleanly is left alone with the reason spelled out.
One-size listings can stamp, and skips explain themselves
Two SKU-page upgrades from a live stamping session. First: some Etsy listings sell just one of a product's sizes (color variations only, no Size on the listing), and the stamper refused to guess which size that was, so every row skipped. Paired listings with multiple catalog sizes now carry a "Sells" picker: choose the one size the listing actually sells and stamping writes that size's SKU on every row. The same pin guides order matching, so a size-less order queues the right size instead of going to review. Second: a skipped row now says why (no Size on the listing, or a size the catalog doesn't name) right on the result, with the fix spelled out, instead of a bare skipped count.
Etsy drafts carry package size and weight for calculated shipping
Shops whose Etsy shipping profile calculates rates from the package hit a wall creating drafts: Etsy requires the listing's item weight and dimensions up front. Draft on Etsy now sends them, prefilled from what the catalog already knows: the heaviest size's sliced filament weight and the largest part dimensions from the slicer (or your explicit box size when you've set one). All four fields are editable on the draft form, so you can add room for the box and packing before creating.
Inch sizes match on Etsy again, and drafts satisfy Etsy's new rule
Two Etsy fixes from a live selling day. Etsy sends listing text with quote marks encoded, so a size like 4" never matched during SKU stamping or price pushes — whole numeric-size listings skipped every row while word sizes worked fine. The matchers decode Etsy's encoding now, so inch ladders stamp and push like everything else. And Etsy recently made a processing-time "readiness state" required on new physical listings, which blocked Draft on Etsy: the draft flow now clones it from your template listing automatically, right alongside the shipping profile.
The drift watch understands your posted-price policy
If your shop bakes shipping into prices or runs a marked-up sale, your stickers sit well above the bare suggested price — which meant costs could creep up underneath them for months without a word from the drift watch. Each shop now carries a posted-price policy (on the shop form in Settings): whether prices bake shipping in, and the standing sale markup. The drift watch compares every listing against the policy's target instead of the bare suggested price, so a rising cost pokes through even a marked-up sticker. Price pushes default to the same policy on every device, and the push confirm still lets you override per push. Shops that leave the policy unset behave exactly as before.
Decimal and nursery sizes sort where they belong
Two size notations the catalog didn't understand now sort numerically everywhere. Filename-safe decimals (3p5in meaning 3.5 inches, since a dot breaks gcode filenames) rank right between their neighbors, so a 3in / 3.5in / 4.5in / 5in / 10in ladder reads in order instead of dumping the decimals at the bottom. And nursery trade sizes (N3 through N10 pots) sort as their own numeric family, so N10 comes after N8, not before N3 the way alphabetical order had it. Order matching learned both too: a buyer's 3.5 inch pick lands on the 3p5in variant, and a nursery N3 can never be mistaken for a physical 3 inch.
Price pushes learned free shipping and sale markups
Two new options on the Push to Etsy confirm, for shops that don't price the plain way. "Bake shipping into the price" pushes the stay-whole price (the item price with your carrier cost folded in) instead of the bare suggested number — for free-shipping shops where a separate shipping line doesn't exist. "Sale markup %" marks the posted price up so a platform sale's advertised discount nets the price you actually intended, rounded up to your own price step so the sticker is postable and never dips under the floor. The confirm shows every variation's old and new price under whatever options you pick, and the push audit records them. And pushing is no longer only for drifted listings: every linked listing on the SKU page has its own Push price control now.
Erase a tag, dismiss a single draft size, and find Draft on Etsy
Three small unblocks. The Spools page gained an "Erase a tag" tool for the desktop reader: wipe whatever an NTAG carries (OpenSpool or ACE data) so it reads as blank again — the tag's identity never changes, so a registered spool still resolves. The Forge drafts inbox now lets you dismiss one size row instead of the whole group, for when a batch slices six sizes and only four are worth selling. And "Draft on Etsy" is one click from the catalog header now, instead of hiding behind the SKU tool.
The desktop reader finds registered tags, and phones keep the tag to themselves
Two scanning fixes from live use. Tapping an already-registered tag on the USB reader used to open the register form as if the tag were new; it now opens the spool's page, exactly like a phone scan. And on Android, finding a spool used to also pop the system's own "new tag scanned" sheet over the top (the phone reading the tag's raw contents the instant our scan session ended) — the session now lingers a few seconds so you can lift the phone away in peace.
Write printer-native spool tags from the desktop reader
The desktop reader learned to write. Every spool's page now has "Write ACE tag": tap a blank NTAG213 on the USB reader and it comes off carrying the exact format an Anycubic ACE slot reads natively, so the printer's own screen shows the right filament, color, and temps. The tag registers to the spool the moment the write lands. OpenSpool tags write from the desktop too (the same tags phones write, for setups where the phone can't). Browsers can't write these raw tag formats at all — this is what the desktop agent exists for.
A USB desktop reader joins the Spool Vault
Phones are picky about factory spool tags. A small desktop app (the Anvil NFC agent) now owns a USB reader like the ACS ACR1552U and reads any tag, every time. Pair it once in Settings under Bridges & readers, then hit "Use the desktop reader" on a spool's page (the tap attaches the tag to that spool) or on the Spools page (the tap opens a pre-filled register form). The web page and the reader don't even need to be on the same machine: start the read from your phone, tap the tag on the shop computer's reader. Writing printer-native ACE and CFS tags on the same reader is next.
Marking a plate done finishes just that part, unless you say otherwise
When a printing part had queued siblings on the same printer, the Mark done panel used to pre-tick all of them as a shared plate — forget to untick and you finished parts that never printed. Flipped: only the part you are finishing is ticked by default, and you tick the others when they really shared the plate (a sibling that is also actively printing on that printer stays ticked, since one machine can only be printing one plate). The print-time estimate follows your ticks live.
Weigh spools in kilograms or pounds, right off the shipping scale
Shipping scales read kilograms or pounds, not grams. The Weigh & reconcile form and the register form's "left now" field both take the raw scale reading with a unit picker (g, kg, lb) — and registering a partial spool can take the gross reading with the spool included, subtracting the core weight the filament catalog already filled in. The register form shows the computed filament grams as you type, and calls out a number bigger than the spool could hold (the classic 64-instead-of-0.64 typo) before it saves.
Tag scanning says what happened, every time
Three quiet failure modes, all fixed. Holding a tag against the phone used to log a dozen duplicate scans (one lookup at a time now, with a short same-tag cooldown). A tag the browser cannot read (Bambu and CFS factory tags on some phones) used to look like nothing happened — now it says so and points at the QR label or NTAG sticker fallback (on phones that CAN read them, a Bambu factory tag works as the spool's identity: tap, register, done). And backgrounding the app used to silently kill the scanner while the button still said Ready — it now tells you scanning stopped and one tap re-arms it.
Weigh a spool, and the cost engine learns your real waste
Spool Vault phase three closes the loop from tracking to truth. Every spool page gained a Weigh & reconcile form: put the spool on a kitchen scale, enter the reading (with the core weight on file, the gross reading is enough), and the gap between what the scale finds and what the tracking says is recorded as your real drift. Spools that printed 200g since their last weigh (or hit zero) wear a quiet "weigh due" chip. Those weighs add up to a scrap report on the Spools page: how much filament each material and printer actually used, how much went to multi-color purge, and how much simply went missing beyond what the gcode said. That last number is exactly what the Waste % assumption prices, so the field in Settings now shows your measured rate with a one-click fill — like the learned failure rate, it is a signal, and nothing changes until you apply it and save (purge is never in that number; the purge-per-color assumption already prices it). The page also compares each product's estimated filament against what its finished jobs really pulled off the spools, priced at the real spool cost, so a product that always runs over stops hiding. And Running low on Insights now checks physical spools against the queue: when queued orders need 480g of a color and your spools hold 310g, you hear about it before the printer does.
Adding a filament color twice can't duplicate it anymore
A double-tap on the save button (easy on a phone) used to fire the add twice and quietly create two identical color entries — which split your stock number across two rows and could confuse order color-matching into sending orders to review. Creating a color that already exists (same brand, type, and color name) is now a clean no-op everywhere: the material form, the multi-color add, and the CSV import all check first. Registering a spool also got more honest about near-matches: when several of your existing colors look like the one you picked, the form says so and asks you to choose, instead of quietly adding a new entry.
QR labels: spool tracking for any phone, no NFC needed
NFC tag scanning needs Android Chrome, and not everyone has that in their pocket. The Spools page now links to a printable QR label sheet: print, cut, stick one on each spool, and pointing ANY phone camera at a label opens that spool (a fresh label opens the register form with its identity pre-filled, so labeling a rack is print, stick, scan, four fields). A label is just another identity on the same record, so a spool can carry a QR label and an NFC tag at once and both open the same place. Sticker paper is nice; plain paper and tape works.
Your printers now report starts and failures, not just finishes
The printer bridges (Bambu MQTT and Klipper/Moonraker, which covers a Rinkhals-flashed Anycubic) now relay every meaningful transition, not just the happy ending. A print starting flips the matching job to printing on its own; a failure marks the job failed with the wasted filament and hours estimated from how far the print got, which also decrements the right spool proportionally; a cancel puts the job back in line. Bridges also report the gcode filename, so Anvil matches the exact job by name and SKU instead of assuming the oldest one (and still falls back safely when it can't be sure). The jobs board gained a printer strip: one chip per printer showing what it's printing and roughly how long to go, or idle. Existing bridge setups keep working untouched; update the bridge script to get the new events.
Register a spool by picking it, not typing it — and write its tag
The spool register form now searches a built-in catalog of about 5,100 filaments across 53 brands (community data, credited on the sources page): type a few letters, tap your filament, and the brand, material, color with a swatch, net weight, and even the empty core weight fill themselves — you just confirm what you paid. A picked filament also carries its print temperatures and density, which powers the new Write tag button: hold a blank NTAG sticker to your phone and Anvil writes an OpenSpool-format tag AND registers it as the spool's identity in one touch. Registration can also add the color to your filament library and stock in the same motion, so pricing, order color-matching, and the color-level inventory all learn the new spool without a second trip to Settings. Everything stays editable, and hand-typing still works for anything the catalog doesn't know.
Spools load onto printers, and finished jobs pay from the right one
Spool Vault phase two closes the loop from tag to grams. Every spool now loads onto a printer (and a slot, for an AMS/ACE-style unit) with one button on its page: loading a position moves whatever was there back to the shelf, the Spools page shows the whole loadout at a glance, and the Kobra ACE's slot 4 (a known hardware fault) warns before it accepts. From there, consumption is automatic: a slicing pipeline can send each plate's per-slot filament estimate ahead of time, and when the matching job finishes, Anvil takes the grams off the exact spools that were loaded, purge and flush split out on multi-color jobs, partial prints scaled by how far they got. No pipeline? A finished job still decrements the printer's sole loaded spool from its own numbers. Grams that arrive for a slot with nothing loaded are never dropped silently: Insights tells you which printer printed untracked plastic. Scans and load actions taken at the printers on flaky WiFi queue on the phone and send when the connection returns.
Spool Vault: every physical spool, one tap away
The new Spools page (3D printing, under Workshop) tracks each physical spool as its own record: brand, material, color with a swatch, what you paid, and a live remaining-grams bar. The headline is NFC: stick a cheap NTAG sticker on a spool, tap it with your phone (Android Chrome), and the spool's record opens in seconds; an unknown tag jumps straight into a pre-filled register form, so tagging a whole rack is tap, four fields, next. A spool can carry several tags (different printers speak different formats) and any of them resolves to the same record; dead tags get replaced without losing history. This is phase one of a bigger arc: automatic consumption from sliced jobs, scale reconciliation, and a real waste factor for the cost engine ride on top of these records next.
An order for a size you don't carry yet goes to review, not to its neighbor
When an Etsy listing offers a size before your catalog does (say the listing grew an X-Large option while the catalog still ends at Large), an order for that new size used to slip onto the closest existing size and quietly queue the wrong print. Now a size Anvil recognizes but can't find in the catalog sends the order to the review queue instead, where you pick the right product once the size exists. Numeric sizes are untouched: a 6 inch order still finds a variant named 6 inch.
Add filament colors by tapping, not typing
Adding a material's colors now shows the line's color palette as tappable chips: pick your filament (say, Polymaker PLA), tap Muted Blue, Fossil Grey, and Army Beige, and each lands as a ready color row with its name and a starting swatch. Everything stays editable, and other brands get a common color wall (Black, White, Grey, and friends). This matters beyond convenience: order color matching scores buyer choices against your color names, so a hand-typed name with a stray letter can quietly send an order to the wrong spool. Picked names do not have typos. Swatches are close rather than color-matched; the hex printed on your spool wins.
The jobs board now tells you when a buyer's color didn't match
When an order comes in with a color choice Anvil can't confidently match to one of your spools, it queues the work at the product's default color rather than guessing. That was the right call, but it happened silently, so a Mist Blue order could sit in the queue wearing Terracotta until you caught it by eye. Those jobs now wear an amber heads-up right on the card: buyer chose "Mist Blue". Pick a color on the job and the note retires. The tooltip also shows the permanent fix: put the listing's color name on the spool in Settings (a color like "Muted Blue - Mist Blue" matches orders on either half). The Materials form now explains which field does what, too: Color is the label shown on jobs and matched against orders; Name is your internal label.
Failed a print at the packing table? Now you can say so
Sometimes a print finishes, gets marked done, and then fails the eyeball test when you pick it up to pack it. Finished prints now carry a Mark failed button: one click flips it to a real failure, reverses any sale or shelf unit it recorded, and sets its order to wait for the reprint, so your win/loss record and your money both stay true. Also fixed: hitting Reprint on a finished part quietly queued the new attempt behind the old card, with no Start button anywhere. The fresh attempt now shows up front and center, ready to start.
The catalog is fast again at any size
A catalog with a thousand listings was quietly shipping every collapsed product group's full contents on every single page load, about 19 MB of it, which took long enough that clicking Save or Delete looked like nothing happened and navigating to the catalog looked broken. Collapsed groups now ship only their headers; a group's contents load the moment you expand it, in a few hundred milliseconds. Search across collapsed groups still works exactly as before, and small catalogs are untouched.
Pick the shops right in the draft inbox
Saving a draft product used to list it only on shops flagged as defaults in Settings, and if none were flagged it saved unlisted without saying so. Now every draft group shows Listed on checkboxes right in the inbox, pre-checked from your default shops and editable per product before you save. Checked shops attach to new products and get added to a product a re-save updates (never removed, so a re-slice can't unlist something you set up). And if no shop is flagged as a default, the inbox says so plainly instead of staying quiet.
The Hobbyist date filter now actually filters for 3D printing
Picking a time period on the Hobbyist dashboard scoped every craft's numbers except 3D printing, which kept showing all-time totals no matter which chip you picked. One missed connection when the filter shipped. Fixed: prints, hours, filament, cost to make, and the making pulse all follow the selected period now, scoped by when the work finished.
Slicer feeds can send a product picture now
A slicing pipeline that feeds the Draft products inbox can include a product render with each slice (an optional image field in the same POST). The render shows on the draft group in the inbox, so you can tell products apart at a glance, and when you save the group to your catalog it becomes each listing's thumbnail. It never overwrites a photo you added yourself: a product that already has a picture keeps it. The batch's parts all carry the same render, and Anvil stores just one copy per product.
Your slicer can feed the catalog now, through a review inbox
If you run your own slicing pipeline, it can now send each sliced part's numbers (SKU, grams, minutes, printer) straight into Anvil. Add a feed under Settings, Shops & Fees, drop the secret into your pipeline's config, and every slice lands in a new Draft products inbox: grouped by product, each size and part priced through the real engine with your filament costs, machine rates, electricity, and failure buffer. You review the names and prices, then one click saves the whole product to your catalog, listed on your default shops. Nothing touches live products until you say so, and re-slicing the same SKU updates its draft (or its already-saved product) instead of creating a duplicate.
Shared plates can book their real filament, not a doubled estimate
When parts print together on one plate, each part's slicer estimate includes its own file's plate overhead (the prime line, skirt, and color-change purge), so summing the parts counts that overhead once per part even though the real combined plate only paid it once. The "printed on one plate" finish now takes an optional actual filament total alongside the actual print time. Leave it blank and each part books its own estimate exactly as before. Enter the real figure (your slicer's combined-plate number, or a spool weigh-in) and each part takes its proportional share, the same way the plate's real print time already splits. Single-color plates barely move; multi-color plates with purge waste are where the real number earns its keep.
The estimate screen got a big refresh
Drop G-code now answers faster and scrolls less. Material is picked by type (PLA, PETG, and so on) instead of a specific spool, because the estimate already prices on your real average for the type and any color of it prints the same listing. Every store shows its price at once: Direct plus each shop in one tidy list, each row carrying its suggested price and take-home with the numbers lined up, so comparing stores is one glance instead of flipping a dropdown (and it stays clean no matter how many stores you run; multi-size drops show each store's price range). The save box became one card: name, collection, and size on a single line, your stores below, and the Save button at the bottom once you've checked everything over. Your plates now live in one card, grouped by size from largest to smallest with a subtotal per size and a totals row, replacing the loose pile of cards and the separate combined-stats block. And once plates are staged the page flips to check-over-and-save: the name and save controls lead, the pickers follow, and the drop zone waits at the bottom as a slim add-more strip. The parsed numbers on a single-file drop collapsed to one stat line (the slicer source lines are one tap away, still fully auditable), the cost build-up tucks behind a toggle so the raw-to-loaded-to-price story leads, and a multi-size drop shows a tidy price-per-size list you expand as needed. On a desktop the page splits into two columns with the price riding along on the right as you work; on a phone a floating price pill follows you down the page and taps back to the full breakdown. The estimator also remembers your usual printer, assumption set, channel, and the stores you list on, on this device, so every drop starts where you left off.
Shipping now accounts for box size (dimensional weight)
Carriers bill the greater of a parcel's actual weight and its dimensional weight (box volume ÷ a carrier divisor), so a light but bulky product ships heavier than the scale says. Give a 3D product its box size (L × W × H) on Edit details and set the divisor on your shipping profile (139 for UPS/FedEx, 166 for USPS), and the shipping estimate bills on whichever is greater, per box. Leave the box size blank and everything prices by weight exactly as before. It only ever moves the shipping line, never the item price.
Finish parts that printed on one plate together
Printing a few parts of a product on a single plate? When you mark the plate done, Anvil now spots the other parts of that project sitting on the same printer and offers to finish them together. Enter the one real print time for the whole plate and it splits across the parts, so the product's cost reflects the actual print instead of adding up each part's separate estimate. Filament is unchanged (same plastic either way), and it only touches the cost side: your listed price and what the sale records are exactly as before. Untick any part that actually printed on its own.
Switch a queued job to any filament, not just the same type
The color picker on a queued 3D job used to only offer other colors of the same material type. That was fine for swapping a PLA job to another PLA color, but if an order matched to the wrong material entirely (say a PETG spool when you printed PLA), you were stuck with no way back. Now the picker lists every spool you have, with your job's own type first and the rest grouped by type below, so you can always correct it to the filament you actually used.
Catalog header no longer scrolls sideways on a phone
On a narrow screen the catalog's top actions (currency, Build a quote, Data) ran off the right edge and let the whole page scroll left and right. They now wrap onto a second line instead, so the page stays put.
Capacity planning now allows for reprints
The capacity planner projects when your machines free up from your queue and each job's expected time. Now a queued product with a learned failure rate carries a reprint allowance: a product that fails a third of the time is planned to tie up its machine about half again as long, because on average that's what it takes to get one good unit. It only kicks in once a product has enough recent jobs to have a real rate, and it's capped so one very flaky product can't blow the timeline up. Running jobs are untouched. So the 'can I promise this by Friday?' answer accounts for the reprints you actually do.
Tell a product it ships in two boxes
A bulky product that genuinely ships in two boxes pays the carrier's base rate twice and carries two boxes' packaging weight, but the estimate assumed one box, so the projected take-home read high and the stay-whole break-even read low. Now a 3D product's Edit details has a "Ships in" field: set it to 2 and the shipping estimate charges a base rate and packaging weight per box everywhere it shows (catalog cards, the cost breakdown popup, quotes, exports, dashboards). It covers the whole product: on a multi-part product, set it on any one part and the highest value wins, so parts you leave alone never add boxes. Everything else stays put: the item's list price never moves, and every product stays exactly as it was until you change the field.
Lock a part's color
A 3D part can now lock its color: check "This part is always this color" on Edit details and it always queues in its own saved filament, even when an incoming order carries a color choice. Made for parts that ship in one fixed color no matter the listing, like a planter's wood-look stand staying brown while the pot prints in the buyer's color. You can still change a queued job's color on the board.
Log a failed print's waste, even with no layer data
When you mark a print failed, Anvil estimates the wasted filament and time from the layer it died on. If a product has no saved layer count (a catalog or imported item that was never sliced here), there's now a "% wasted" field you can type directly, and a clear note telling you why the layer box is blank, instead of the amounts quietly sitting at the full print. Either way you can still fine-tune the grams and hours by hand.
Save a multi-plate product as one priced listing
If a product is really a few plates that sell together (say a Head and a Body), the new Assemblies section on your catalog lets you save that combo and see one price to post for it. Anvil prices the plates together so fees and packaging count once, not once per plate, which is the accurate number to list. Pick the product group, tick the plates that make the full print, name it, done.
Capacity planner: promise dates in prints, not hours
The 'can I promise it by?' checker used to make you type a new print's hours. Now you can pick one of your 3D products and a quantity, and it fills the time from that product's own print estimate, so you can answer 'can I make three more Planters by Friday?' directly. The date defaults to a week out so an answer shows right away, and the summary now tells you how many prints and how much print time are ahead of you.
Bambu Studio .gcode files price correctly now
If you exported a plain .gcode straight from Bambu Studio, Anvil read the print time, colors, and size but showed 'Filament: Not found', so it couldn't price the job or let you save it. Bambu stamps the filament weight a little differently from PrusaSlicer (a different word and separator), and we were only reading the Prusa wording. We now read both, so a Bambu export drops in and prices the same as any other slicer's file.
Dual and tri-color spools
A filament can carry a second and third hex, and every swatch (inventory, queue demand, trend bars, color pickers) paints the split. The filament shelf also regrouped by type first, then brand, matching how the pricing engine pools your spools.
Filament by the month
A monthly filament tally on the jobs page, by color, with an archive of earlier months. The home HUD shows the month's burn when there is one.
Filament pools by type
Listings price on your real average cost for a material type (any brand of PLA+ counts), and any same-type spool is interchangeable at print time. Actual job costs still use the exact spool you printed.
Pick the spool at print time
Queue a 3D job in any color of the same material type. The jobs page shows what the queue needs by color against your stock, flags shortfalls, and reorders a spool in one tap. Plus bulk filament import from CSV and a field-by-field tuning guide at /tune.
Multi-piece products and the breakdown popup
A product can be four identical sides printed two to a plate: quantity and fits-per-plate price it correctly (purge and handling per plate, labor and fees once per listing). And every catalog card gained a Breakdown button that opens the full cost build-up, the same math the estimator shows.
All crafts
92October 3, 2026
The jobs board reads on a phone
On a narrow screen a project card's name was squeezed down to a letter by the order clock and the progress pips, and a finished part's row (Done, Mark failed, Reprint) ran off the right edge. The name now keeps the first line to itself with the clock and pips under it, and each part's buttons take their own line and wrap inside the card. Nothing changes on a wide screen.
A welcome that speaks your craft
The welcome email used to go out the moment an account was created, before Anvil knew what you make, so everyone got the same note about materials and machine time. It now arrives when you finish the two-step setup, in your craft's own words: yarn and hours for crochet, a bid for a trade or a service, break-even for a digital design, with a button straight to that estimator. A new crochet bench also starts with a 3 percent redo buffer instead of 10 (a frogged piece costs hours, and the yarn is rewound) and a 20 percent margin instead of 50, because a crochet price is already your hours at your rate and doubling it gave a beanie nobody could charge. The crochet estimator also says which hourly rate and margin priced the number in front of you, with a link to set your own. Accounts that already exist keep every number they have.
Explanations tuck behind a tap
Helper paragraphs that explained a control, on the Filament page (the uncharged fold, the reorder buttons, the register form's library and copy notes, the tag inspector and eraser, scrap and drift, estimated versus actual), the jobs board (the plate finish panel, the customer order builder, bundle saves, Recost), the catalog's assemblies and set builder, and Settings (shipping math, free shipping, the box lineup, the posted-price policy, wholesale, freezing past sales), are now a small info mark beside the control: tap it to read, tap away to close. Nothing changed in what the controls do. Warnings that need to stay in view stayed in view.
One clock per order on the jobs board
A queued order used to wear two separate signals: the red buyer-can-cancel pill and a Waiting badge that only appeared after three days. They are one clock now. For the first 24 hours it counts down the buyer's cancel window (hold off). Then it counts the days the order has waited against the promise the buyer bought under: the listing's own processing time when Anvil learned it at queue time, else the shop's 3 to 5 day default, and it says which. Two days short of the promise the clock turns yellow, one day short orange, at the promise red, and LATE once the business-day ship-by has passed at the end of your day in your own time zone. At red an Etsy order gets an update shipping link: one click copies a short note for the buyer and opens the order on Etsy, where you set the real ship date (Anvil never writes to Etsy). A job you queued by hand with no order behind it still ages, quietly, on its queue time.
A reprinted failure stops nagging
Clicking Reprint on a failed print used to leave the failure sitting in Needs attention beside its own new attempt, still offering Reprint, so it read as two copies of the same job and a second click would have queued a third. Now a failed print that already has a reprint leaves Needs attention the moment the reprint is queued, and its record in Completed says Reprinted, queued, printing or done instead of offering the button again. The failed attempt itself is untouched: it still counts in your attempt history and your product's failure rate. Project runs already worked this way; this brings single prints in line.
See your daily tasks across the week and the month
Daily tasks used to show on Today only, which kept the Week and Month views tidy but hid how full your days really are. Both views now have a Show daily tasks button. Turn it on and every daily task appears on today and each working day ahead in the Week view, and on every day from today forward in the Month view. Turn it off and the views go back to just your planned notes and ship-by dates. It is off until you ask for it, and it remembers your choice on each device. A tick on a future day counts for that day, so you can clear tomorrow's early if you did it early.
Your day plan waits for the print, and remembers your side of the shop
Three small things on the day plan. A Pack and ship card now waits until the work is actually off the machine: if any part of that order is still queued or printing (a reprint counts), the card stays away and comes back by itself when the last part finishes. An order with no ship-by date of its own now reads as late after five days instead of two, which matches a 3 to 5 day handling time. And the Workshop and Admin filter is remembered on each device, so if you only ever work the Admin side the page opens there; choose All to clear it.
Tasks that repeat every day
Some things you do every single day: check the printers, water the seedlings, answer messages. The quick-add row on your day plan now has a Daily box (or lead the line with "daily:"). A daily task comes back each morning with a fresh tick, so finishing today's never finishes tomorrow's, and one you skipped yesterday does not pile up as a leftover. It wears a small Daily chip so you can tell it from a one-off, and deleting it is how you stop it. Durations and "tonight" still work: "daily: check the printers 10m".
A website order's job card says which style the buyer picked
When your own site sells a product in more than one style (a keychain version, a different pose, a second face), the order reached the jobs board labeled with just the shop and the order number. The queued plates are the product's defaults, so nothing on the card said the buyer wanted the other one, and the default got printed. The label now carries the pick: "My Shop #1042 · Mood Ghost: Attitude". It reads the same two places the order matcher already trusts, the variant name and a choice written in a part label like "Body (Body 2)". An order with no style pick reads exactly as it did, and searching History by order number still finds it.
'Not today' works on carried-over cards
Snoozing a day-plan card worked the first time, but a card that came back the next day wearing its Leftover chip ignored the button: the click was silently swallowed by the earlier snooze's record, so the card would not leave. Now a re-snooze refreshes the record to today, the card steps aside immediately, and it returns tomorrow exactly as a first snooze would. Done ticks are untouched.
The queue says how deep it is
The Jobs link in the sidebar now wears a small count of how many jobs are waiting in line, so you can see the queue's depth from any page without opening the board.
PrintPilot tune-up: a day that fits in your pocket
A round of founder-driven polish on the day plan. The page no longer scrolls sideways on a phone: the add-task bar wraps cleanly, with the text box on its own row. The how-to prose moved into little tap-for-help tips (the ⓘ next to the day's name and on the add bar), so the board leads with your work instead of instructions. Times read as a 24-hour clock now: 09:00, 16:50. The 'more than a normal day holds' warning stops crying wolf: it used to fire at just three hours booked, because the day's capacity was set to a three-hour task budget; a day now holds the whole 09:00 to 17:00 window, which also fixes notes that seemed forever scheduled for tomorrow (a 'full' today kept pushing them a day ahead, every day). And a new card: when a fresh review lands on your Etsy shop, the day reminds you to post a public response, wearing the review's stars and the product's name; the click opens your shop's reviews, and your tick clears it.
A calmer home page
Your landing page had grown two ways of saying the same thing: Start here up top, and a running list of recent activity below it (reorder this, added that, a print wrapping up). That timeline lives in PrintPilot now, where it belongs, so it is gone from home. The Where you left off tile is gone too: you are already on the page, and the forge floor below it lights up exactly what you work in. What is left is what you actually need when you come back: your first task from Start here, a tight strip of live numbers (making now, in queue, low stock, awaiting sale, finished, filament), your money and finishes pulses, and the forge floor. A brand-new account still gets the numbered setup path until there is real work to show.
Designers: who's earning their license fee
If you sell licensed designs, the license bill deserves the same scrutiny as filament. The new Designers page (catalog Data menu) lets you attach a designer to each collection and record what their license costs: a monthly subscription with real start and end dates, a one-time purchase price per design, or both at once, since some sources are exactly that mix. Mark your own designs as yours; they never cost anything. The report then reads your recorded sales and ranks every designer by net: revenue their designs have brought in, minus what their license has cost so far, with the dead weight leading the list. A subscription with no sales stops being a vibe and becomes a number. The page shows and names; canceling anything stays your call, and a cancelled subscription stops accruing on the date you cancelled it.
A heads-up while the buyer can still cancel
Buyers can cancel an order within 24 hours of placing it, and printing during that window gambles a plate on a change of heart. Queued orders younger than 24 hours now wear a red chip: buyer can cancel, with the hours left, on the job cards and in the printer lanes. It's information, not a lock: Start stays clickable for the orders you know are solid, and the chip clears itself the moment the window passes. The clock runs from when the order was placed, so a reprint or a late queue never restarts it.
The jobs board whispers when the shelf can cover an order
If a queued job's product already has finished units on your made-to-stock shelf (a cancelled order you finished anyway, or stock you built on purpose), the queue card now wears a quiet green chip: N on the shelf. The new-order email says it too, right on the item line, so you know before you even open the board. It is a hint, never an action: nothing records or ships by itself, you decide whether to print fresh or send the one you already made. The chip retires on its own when the shelf empties or the print starts.
Wider pages, a real Back button, and the boards tidied to match
Round two of the layout work, straight from a working session. Every workshop page now uses more of your screen, and the app has a Back arrow in the top bar — in app mode there was no browser Back, so pages like the capacity planner were dead ends. The Jobs board leads with what matters: the queue's filament needs sit at the very top (so you can judge a half-roll at a glance), In progress and Printing come before the waiting queue, each plate in a project now shows its estimated grams, the Board and Done tabs sit beside the page title, and Sync Etsy orders moved up next to Refresh. Logging a past job now lives on Done, where the record actually lands, the customer-order builder lives with the orders it creates, and the filament history charts moved to the Hobbyist dashboard with the rest of the fun facts. The Catalog got the same pass: Sets moved into a header button, the sale-mode banner is a small chip until you flip it on, search and filters share one row, and the sort picker now responds instantly with a sorting cue instead of looking like the click didn't take.
The nav now matches how a shop actually runs its day
Three changes to the left rail, all in the direction of fewer clicks to the pages you live in. Etsy SKUs is now a direct link in the Workshop section, instead of hiding behind the Catalog pipeline pills — it's where you see what Etsy has pulled and what can be paired, stamped, and synced, and that's daily work. Jobs and History merged into one lifecycle: the Jobs page has a Board and a Done tab now, so capturing a sale, logging one, and reviewing the archive all live on one surface (every old link still works). And the three barely-visited landing pages — Overview, Dashboards, Tools — folded into one Dashboards & tools hub behind a single More entry, with everything still one click inside it. The Running low tile on Insights also stopped being its own page and now takes you straight to Inventory, where those lists actually live.
Your data export is now the complete backup it always claimed to be
The account export said complete backup on the label, but a whole set of your records never made it into the file or back out of a restore: your spool rack and its history, replacement costs frozen on sales, your saved ladder answers, scheduled trade visits and crew names, the Forge draft inbox, day notes, saved message snippets, your price-watch and review settings, site links, collection photos, and the social queue. All of it now exports and restores, with every cross-reference following along. Credentials and things that rebuild themselves on the next sync stay out on purpose, each for a stated reason, and a standing test now makes it impossible for a future feature to add your data somewhere the backup forgot. A few quieter fixes shipped alongside: downloads now match exactly what your plan shows on screen, and the weekly insights email can never send twice in one week.
The week view slims down to one line per card
A week column is for seeing the shape of a day, not reading every card in full, so the week view now shows each card as a single line: what it is, how long it takes, and the chips that matter (Late, Leftover). Click a line and it pops open right there with the rest: the detail, the scheduled time, the link into the work, the tick for tickable items, Not today, and a note's date and delete controls. The Today view is unchanged, full cards as always.
Your day grows a Week and a Month, and to-dos can land on another day
The day page now has three lenses. Today is exactly what it has always been. Week lays the working week out as columns, each day with its schedule and booked time, so you can see Thursday filling up before Thursday arrives. Month is a planning calendar that shows only what is genuinely knowable that far out: ship-by deadlines on open orders as a small count on each day, and the notes you have planned onto a day, by name; click any day to see the detail. And the quick-add box learned to plan ahead: lead a line with a day, like tomorrow: photograph the new liners, or fri:, or 8/14:, and the note lands on that day instead of today. There is a small date picker beside the box and on every note's row for the same thing without typing, and clearing it brings the note back to today. A note planned for a day you did not finish rolls forward the next morning saying where it came from, never silently. If you get the morning brief, it now ends with a one-line heads-up when tomorrow has planned notes waiting. One more honesty fix along the way: a card you snooze with Not today now shows up on the week's next working day instead of disappearing from the week entirely.
Order-level fees count once, and connector orders carry their real costs
The per-order fee your channel charges on buyer-paid shipping and collected tax is order-level money, and two edge cases could bend it: a receipt whose items recorded at different times could be charged that fee once per recording, and a receipt whose first item's product had been deleted could silently lose the fee entirely. Now every path that stamps it checks whether the order already carries it, and the stamp lands on the first item that can hold it. Square, Shopify, and WooCommerce connections also step up: their orders now report buyer-paid shipping, collected tax, and the ship-to state where the platform provides them, so those sales price their true per-order fee, group under one numbered order on History like website and Etsy orders always have, and feed the sales-tax remittance view. We checked every existing order: none were double-charged, so this is protection going forward, not a correction of the past.
Say Not today to any card on your day, and leftovers own up
The review card's Not today button proved the pattern, so now every self-clearing card on your day has one: a shipment you can't post yet, a restock you'll handle tomorrow, a QC pass you're not ready for. One click hides the card for the rest of today, it books no time in your schedule, and it comes back tomorrow on its own. Nothing is marked done, because the work isn't: these cards still clear only when your shop's data says so. And when a snoozed card returns, it wears a small Leftover chip, so something you've been putting off can't quietly blend back into the list. The same snooze carries everywhere the day shows up: the day page, the pop-out pilot, your home screen's start-here, and the morning brief.
The day stops asking you to log sales that record themselves
The Log the sale card counted every finished print with no sale recorded yet, including ones tied to an Etsy or website order. Those record their sale on their own once the order is done, and a multi-item order holds its finished pieces until the last one prints, so a completed item could sit sale-less for a while and still get flagged. Now the card counts only a finished job with no order attached, the one genuinely waiting at the bottom of your jobs page for a Sold answer. Order-linked work drops off the card entirely, since the order flow already handles it. The same fix carries to the start-here count on your home screen, so the two always agree.
Collection names stop vanishing on your phone
On a phone, the catalog reserved a wide strip of every collection header for the Quote and Delete buttons, which left the collection name itself about a dozen letters before it got cut off. Those actions now drop onto their own small row underneath the title on narrow screens, so the name gets the full line, and the delete confirmation wraps into a tidy little card instead of running off the edge. Desktop is untouched. The rest of the phone-critical pages, your day, the jobs board, the ride board, the social queue, settings including the box editor, and the insights drift view, were measured at phone width in the same pass and came back clean.
Push all: the whole drift list in one confirmed sweep
When your costs genuinely change, a better failure rate, cheaper material, a new shipping setup, the price watch rightly flags most of the shop at once, and working through forty cards one panel at a time is nobody's afternoon. The drift page now has a Push all button: one confirmation, and Anvil walks every flagged listing through the exact same push the single button does. Each listing is re-read live at its own moment, written under your standing policy, recorded in the push history, and its card retires immediately. They go one at a time with a breather between writes to stay friendly with Etsy, a progress bar and per-listing results show exactly what happened, a Stop button halts whenever you like, and three failures in a row halt the run on its own. Nothing is ever pushed without your click, same as always.
Your marketing block learns where you post, and research time gets its own block
A new Posting section in Settings lets you tick the platforms you actually post on: Instagram, Facebook, TikTok, Bluesky. Your day's marketing block then cycles one per day: Post on Instagram today, with a one-line angle for what tends to work there, and the click opens the platform itself. You do the posting, Anvil just walks you to the door; nothing ever posts by itself. Pinterest is not on the list because its queue already posts for you, and days with pins waiting keep leading with the approvals. Tick nothing and the block stays exactly as it was. And every third day, a research block joins the day: browse what is trending, see what is new on the model sites, peek at competitor shops, read your own stats for a surprise. Twenty-five minutes of looking around counts as work, because finding the next product is how the shop grows.
Drift cards now range the whole listing, and every size shows its own change
The price drift card's headline grew up: instead of only the lowest size's move, it now reads the live listing and says how far prices travel across all sizes, down four to twelve dollars on seven sizes, up two on one, colored by direction. The push panel matched it: each folded size row now shows its own change amount next to the arrow, because a five dollar nudge on the small and a twelve dollar drop on the twelve inch are different stories that used to hide behind one number. The card and the panel are computed from the same plan, so they can never disagree. And the review card's one-click copy now waits for the clipboard before opening Etsy, then says message copied right on the card, so you know the paste is loaded before you land in the conversation.
Price drift cards show the move at a glance
Every price drift card now leads with the numbers: the current listed price, an arrow, and where it should move. Green with an up arrow when the price should rise, because money is being left behind on every sale. Red with a down arrow when the sticker sits above your current target and coming down is the sharper play. While a declared sale runs, the arrow points at your sale sticker rather than the everyday target, since that is what the watch is actually measuring against. The full story stays in the sentence below; the arrow just saves you reading it twice.
Your day splits into Workshop and Admin, and the price watch joins it
Two new chips at the top of your day: Workshop shows the hands-on work, starting plates and packing parcels, while Admin gathers the screen work, reviewing drafts, riding the ladder, ordering materials, logging sales, asking for reviews, your marketing block. Pick a posture and the list narrows to it, with the booked time recounted for what is actually shown; the day's headline numbers stay whole either way. A subtlety we got right: an order waiting to be packed is workshop, but one that already shipped and just needs its postage typed in is bookkeeping, so it files under Admin. Notes you typed yourself show on both sides, because only you know which one they are. And the price watch now reaches your day: when listings have drifted from your target price, one quiet line says how many and which direction the money leans, and takes you to the drift page to sort it out. It clears itself as prices are fixed.
The floating day learned to duck out of the way
The pop-out day now has a shrink button next to its progress bar. One click folds the task list away and leaves just the slim strip that matters at a glance: how many are done, how much is booked, and the bar. Where the browser allows it the little window sizes itself down to match, and growing it back returns it to exactly the size you had it, including any resizing you did by hand. Click again and the full list is back. Handy when the slicer needs the screen but you still want the day in the corner of your eye.
Your day asks for the review, with the message already on your clipboard
A sale is not quite finished when the parcel leaves. About four days after an Etsy order ships, once it has had time to arrive, your day gains a small card: ask this buyer for a review. One click does the whole errand. It copies your ask to the clipboard, filled in with the buyer's first name and what they bought, and opens that order on Etsy in a new tab, where the tracking answers whether it actually arrived and the message button is right there. Paste, adjust if you like, send, and tick the card off. The card never nags anyone who already left a review, never appears for a refunded order, and quietly retires after a month. The words are yours: a new Messages section in Settings holds the review ask, warm by default and editable, plus any other snippet you find yourself retyping, care instructions, thank-yous, answers you send weekly, each one click from the clipboard. Anvil never sends a message for you. It just makes the asking take ten seconds.
Tell the price watch about your sale, and it minds the stickers for you
Yesterday's price watch could look both ways but had one blind spot: a sale. When you post sale stickers above your target price on purpose, an above-target watch would flag every one of them. Now you can just tell it: on the Price drift page, declare the discount and the end date. While the sale runs, the watch measures against your sale sticker instead of the everyday target, using the same arithmetic Sale mode uses to compute the sticker, so your own sale never nags you, while a price that is too high even for the sale still gets a card. And the day after the sale ends, the watch quietly goes back to normal, which means any listing still wearing its sale sticker surfaces on its own. No more calendar note to remember which prices to put back.
The price watch is now yours to tune, and it can look both ways
Price drift has always told you when an Etsy listing fell behind your costs. Two things were fixed about it: the thresholds were ours, and it only looked one way. Both are now yours. On the Price drift page you can set exactly how far a price must stray before Anvil speaks, in percent and in dollars, so a shop that sweats quarters and a shop that only cares about real money can each hear what they want. And a new switch makes the watch look the other way too: when your costs come down, say a print stops failing and your learned failure rate improves, your target price drops, and any listing still sitting high gets a card saying so. It is off by default for a good reason: a sale sticker you post on purpose sits above the target, and only you know when a sale is running. Either way the card tells you the number and leaves the call with you: price sharper, or keep the margin, but now it is a choice instead of a leftover.
The pin queue grows its publisher: connect Pinterest, map your boards, and it posts for you
Anvil now connects to your own Pinterest account, from Settings, beside your other connections. You bring your own Pinterest app, save its id and secret, click Connect, and approve access on Pinterest itself. Then map each product family to one of your real boards, listed straight from your account, or let one click match them by name and create whatever is missing. From there the scheduler takes over: five to ten approved pins a day, spread across your own daytime hours, never a flood, and it stops the moment the day's share is out. Every published pin keeps its link on record. Pin clicks now land on your own website when a product has a page there, with the marketplace listing as the fallback. And your day plan noticed too: when pins are waiting for approval, the daily marketing block becomes that exact job, with a link, and clears itself as you approve.
Your photos line up as Pinterest pins, waiting for your say-so
Every collection that has a product photo and a live Etsy listing now becomes a candidate pin on the new Social queue page, with a caption built from what Anvil already knows: the collection's name, what kind of thing it is, and how many sizes it comes in, deep linked to the listing. Nothing posts by itself. You approve each pin by hand, reject the ones you do not want, and a rejection stays rejected. The queue also says what it held back and why: orchid pots wait until their catalog collections are real, and a collection without a live listing has nowhere to link. Until the Pinterest connection arrives, an export command writes any approved pin's photo and caption to a folder so you can post it yourself.
Pop out your day and keep it floating while you work
A new Pop out button at the top of your day lifts a compact copy of today's list into a small window you can keep open next to your slicer or on a second screen. In Chrome and Edge it is a true always on top overlay, so it stays visible over other programs; everywhere else it opens as a small popup. It is the same day, not a copy that drifts: ticking a box there is the same tick, the self clearing dots keep their meaning, and the one line summary at the top shows the same numbers. Clicking a task in the floating window sends your main Anvil window to the right spot and leaves the little one floating, and it quietly rechecks your day every minute so a landed draft or a shipped order shows up on its own.
Your day now asks for the sale, and carries less clutter
A finished job with no sale logged is money that exists but is not counted: the revenue is missing and so is what it cost to make. The home page counted these; your day never mentioned them. Now it does, as one line: log the sale on your finished jobs, pointing at the exact spot on the jobs board, clearing itself as your answers land. It is the same count the home page shows, worked out in one place, so the two can never disagree. Two things also got lighter: the home page's Start here strip now shows your first move and a count into your day instead of repeating the same list twice, and the Star Seller report folds down to a one line status you can expand, so your morning page is not carrying a monthly report at full size every day.
A sale no longer disappears when the gear behind it does
Deleting a printer, a spool, a machine or a material never touched the sales you had already recorded, but it did quietly drop them out of your dashboards. The sale kept its revenue in your profit and loss while its cost of goods vanished with the deleted row, so your profit read higher than it was, and the sale fell off your revenue, take-home, sold count, leaderboards and per-size table too. Every recorded sale freezes its full economics at the moment you record it, so that frozen record now settles the money on its own and the sale stays where it belongs. This covers all twelve crafts. A sale recorded before Anvil started freezing them stays unpriced, as it always has.
Saving a catalog edit is instant, and the field stays put
On a big catalog, saving one field on a product quietly re-built the entire catalog page behind the scenes: thousands of rows re-read and re-sent for a one line change. That is why a save could say Saved and then show the old value until you reloaded, even though the save had landed. An edit now updates just the card you touched, with the price freshly worked out on the server, so the number you see is the same one the pricing engine stands behind. Adding a product, deleting one, and saving from the estimator still refresh the whole page, because those change what is on it. Measured on a 5,500 model catalog, the save's round trip went from over a megabyte to under half a kilobyte.
Undoing a refund or a replacement values your shelf exactly
When a returned item goes back on your made-to-stock shelf and you later reverse that (you clear the refund, or you detach the replacement), the unit now comes off the shelf carrying the exact cost it went on at, not a blend with whatever else is on the shelf. Two separate returns also stay separate: clearing a refund can only remove what that refund shelved, and detaching a replacement can only remove what the replacement shelved, so one can never quietly take the other's unit. Your inventory value stays right to the cent.
Correcting a sale no longer loses the replacement attached to it
When you send a second item to put an order right, you can attach that make to the order so it carries its real cost. If you then corrected the price or the postage on that same order, the replacement quietly vanished and took its cost with it, and the order started reading more profitable than it really was. The correction and the replacement sit in the same panel on the same card, so this was one click away. Recording a sale again now updates the sale you already have instead of replacing it, so everything attached to it stays attached. The same fix keeps a returned item from being stranded on your finished goods shelf, where it could be counted as stock and as a cost at the same time.
A make that already belongs to an order cannot be given to another one
The picker for replacement makes has always hidden anything still spoken for by an order of its own, because a finished item waiting on the rest of its order looks exactly like a spare. The check only ran on the picker though, so the make could still be attached another way, and the order it belonged to was left with nothing to ship. It is now refused outright, and it tells you why.
Set your time zone, and your day starts when yours does
Anvil used to work out what day it was from your browser, or from UTC when there was no browser to ask. From late afternoon in the Americas UTC has already rolled over, so your day plan could show you tomorrow and your morning brief could arrive on the wrong date. You can now set your time zone in Settings, Workbench, and there is a button that reads it off the device you are on. Your day plan, your morning brief and your on time shipping figure all run on that clock. The brief now lands at 7am where you are. Leave it unset and nothing changes.
Your day has a name, and the top bar says where you are
The bar used to show your shop name on every page, which is the answer to a question you ask once. Now your shop name leads the home page and every other page says what it is. Your day answers to its craft: PrintPilot for 3D printing, Yarn Run for crochet, Kiln Watch for pottery, Burn List for laser, Cut List for vinyl, and so on. It is the same page for everyone, only the name is yours.
The home page opens with what to do first
Landing on the home page now starts with one thing to begin with and the three that follow, with the time each is due and a link straight to where the work lives. It is the top of your day plan rather than a second copy of it, so the two can never tell you different things.
The finished work archive loads a page at a time
History used to render every job and every project you had ever finished, every time you opened it. It now shows the most recent and has a show older button, and searching reaches the whole archive rather than only what is on screen. Nothing about what you can find has changed, only how much of your shop has to be read to find it.
Every line on your day takes you to the exact card
Tapping a job on Your day used to drop you at the top of a filtered list to go hunting. Now it scrolls straight to that order or that plate and rings it for a moment so you can see which one it meant. If the section it lives in was collapsed, it opens that too, because a link that quietly does nothing is worse than no link.
Your day, in your inbox each morning
You can now have Your day emailed to you first thing: what is late, what is worth starting, and how much is on the clock, with a link straight into the page. It is off unless you turn it on in Settings, because it arrives every single day, and one click in the email stops it for good.
The name of whoever ordered it
Packing tasks on Your day now lead with the buyer where we know it, so you are looking for Glenda's parcel rather than order RCJ-1021. Older orders you labeled by hand with a customer name are read the same way.
Five quiet ways the jobs board was telling you the wrong thing
Deleting the same job twice, by a double tap or a retry, used to hand your materials back twice over. Canceling a website order left its sale behind, invisible on your dashboards but still counted in your totals, and could leave a phantom unit on your made to stock shelf. A failed print that you reprinted could strand a paid website order on the dead attempt, so it never recorded itself. Two syncs landing at once could leave duplicate jobs on your board wearing a real order number, which you might have printed twice. And finishing a shared plate could take a share of another part's filament if that part had already finished somewhere else. All five are fixed.
Your day, in the order it wants doing
Anvil has always known what work exists. It has never said when to do it. The new Your day page takes what your shop already holds and lays it out as one ordered day with times on it: orders still waiting on postage, products sitting in the drafts inbox, the next step on your size ladder, materials about to run out, and prints to start. Every line takes you to where the work actually lives, so it is a running order and not a second inbox. A long plate is treated honestly: it counts as the few minutes it takes you to load it and press go, so it is scheduled last and runs overnight instead of swallowing your whole day.
A marketing block that cannot get squeezed out, and a box for everything else
Your day reserves one marketing block every day, and only a real deadline outranks it. There is also a quick-add box: type a line and it lands in today. Write a length in and it is used, so "sand the bases 45m" books 45 minutes, and saying tonight puts it at the end of the day. Anything you add rolls over until you tick it off, and it tells you how long it has been carried rather than quietly piling up. Work the app can check for itself, like an order that still has no postage, has no checkbox at all: it clears itself when your shop data says it is done, so a stale tick can never tell you something is finished when it is not.
Attach the replacement you actually sent
When an order goes wrong you can already say you remade it, which counts another unit of that same product. That never fitted the common case: you sent something different. Sold an 8 inch planter to a buyer who wanted the nursery size, printed the nursery one, mailed it out. There's now a Replace panel on a sold order: pick the finished make you sent, add the postage, and say whether the original came back. The order keeps its revenue and takes on that make's real cost, so take-home reflects what making it twice actually cost you. The replacement print also stops sitting on the jobs board waiting for a sold-or-stock answer, because it was neither. If the original came back and is still sellable, one option puts it on your shelf and takes its cost off the order.
The catalog paints before it prices
A big catalog had to price every product before it could show you anything, which on a large shop is thousands of calculations standing between a click and the page. Now the catalog appears straight away and the value figures at the top arrive a moment later on their own. Nothing about the numbers changed, only when they show up. Sorting by price still waits, because it genuinely needs the prices to put things in order.
A shorter sidebar, with two landing pages
The sidebar listed every destination, which was a lot to scan and worse on a phone. The things you open all day (catalog, jobs, history, inventory) are still one tap. Everything else now sits behind two doors: Dashboards for your numbers, and Tools for the helpers, sale mode, quotes, importing and reporting a bug. Both landing pages are plain lists on purpose, so they open instantly.
The Refresh button actually refreshes now
The quiet Refresh button (jobs board, the ladder's waiting card, the pipeline strip) could spin and then show you the exact same page: the soft re-fetch sometimes reconciled against the router's cached tree and changed nothing, so you had to click away and back to see work that had already landed. It now revalidates the page on the server first, the same mechanism every form uses, so pressing it reliably shows what's new.
Mark a listing as taken down
Pulled a listing off Etsy or your site but want to keep the product? The Edit details form now has a 'Taken down' checkbox: tick it and the catalog card wears a quiet amber 'Taken down' badge, so you can tell retired listings from live ones at a glance. Everything else stays exactly as it was - SKUs, job history, recorded sales, and pricing all keep working, and an order placed before you pulled the listing still routes correctly. Searching 'taken down' in the catalog lists every pulled product. Untick the box when it's back up.
Sort the catalog into a work list
Two new catalog sorts for working through the whole catalog systematically. 'Oldest added' walks your products first-to-last, a stable order that never shifts under you. 'Least recently updated' is the sharper tool: products float to the top the longer they go untouched, and anything you edit, rename, or restamp sinks to the bottom - so the top of the list is always the next thing to do. A collection stays up top until every one of its sizes has been touched, which makes it an honest checklist for a catalog-wide pass like a size restructure.
Deleting a product no longer erases the work behind it
Deleting a product used to take every job it ever had with it: print counts, real grams and hours, failures, and completion dates, all gone. Worse, because the dashboards add up money by walking those jobs, that product's past sales quietly stopped counting there while the profit and loss page kept crediting the revenue, so your profit read higher than it was. Now a delete removes the listing and leaves the history standing. Finished jobs keep their numbers, and recorded sales keep counting with the figures frozen at sale time. Deleting a whole collection or size follows the same rule, and the confirm now says so before you commit. Nothing about your existing data changed; this only affects what happens the next time you delete something.
Customer orders: build them up front, track them as one
A customer asking for several things used to mean queuing each item separately and combining the sales afterward. The jobs page now has Start a customer order: pick the products, quantities, and colors, and the whole thing gets a real order number up front. Every item queues under it, a Customer orders block on the board shows each open order's progress at a glance, and when the work finishes the sales land on one History card automatically. That card grew too: edit the customer name and notes, enter ONE shipping cost for the whole order (it lands once, never double-counted), and print a packing slip, a clean price-free sheet of what goes in the box. New accounts can also pick their order prefix right in the welcome flow.
Insights is a category hub now, and it opens on this month
Insights used to be one long list, easy to skim past. It now opens as five tiles, each with a live count and the dollars at stake: Repeat offenders, Costing you money, Price drift (its own category now), Worth a look, and Running low. Tap a tile for a clean view of just that category, led by a what-to-do-about-it box with the specific moves, including the one-click Etsy price push on drift cards. The page also starts on the current month instead of the last 90 days, matching the dashboards; every window is still one tap away.
Every price now agrees on your learned labor time
Once a handmade product has enough finished jobs with a recorded hands-on time, Anvil prices it at the learned median instead of your original guess. The catalog card has done that for a while, but the dashboards, quotes, the price sheet export, the workbench totals, and the frozen numbers on a newly recorded sale were still pricing at the hand-typed estimate, so two screens could quote the same product differently. Now every surface prices at the same learned time, and your saved estimate stays untouched on the edit form. Applies to the eleven hands-on crafts; 3D printing prices machine time, not typed labor, and is unchanged.
Refunds count on the day they happen
Refunding an old order while looking at This month used to show nothing anywhere: every refund adjusted the numbers of the period its SALE was dated in. Now a refunded sale is two dated events, the way your bank statement sees it. The sale's period keeps the full sale it really had, and the period you issued the refund in shows the money going back out: revenue and take-home drop there, the Refunds & remakes card counts it there, and the by-month table carries the adjustment in the right month. The P&L and the year-end tax pack follow the same rule, so a December sale refunded in January lands in both years the way a cash ledger (and Schedule C) states it. Any view wide enough to contain both dates nets out exactly as before, and what you made (the cost side) stays with the period the work happened in. Remakes still anchor to their sale's date, since they have no date of their own.
One friendly pointer to the free trial, a few days in
If you sign up for a free account and never poke at the paid plans, Anvil now sends exactly one email a few days later: the estimators stay free forever, and here's what the 14-day no-card trial adds if you're selling your work. One email, ever. It respects the product news toggle in Settings, carries a one-click unsubscribe, and if you've already found the pricing page on your own, it stays quiet.
Big catalogs got their speed back
Three code paths were quietly hauling every product photo out of the database as one giant blob: the catalog page's assemblies section, the Insights price-drift check, and queueing work from a tracked quote. On a catalog with hundreds of photographed products that meant tens of megabytes per page load, which read as the whole app going slow. All three now fetch photos the way the rest of the app does: lazily, one image at a time, only when shown. If the catalog felt heavy today, this was why.
A straight answer when your trial ends
The 14-day trial already came with a reminder email a week before it ends. Now the moment after is covered too: if your trial wraps up without a card on file, you get one honest email saying you're back on the free plan, nothing was deleted, and everything you set up during the trial (products, jobs, dashboards, history) is waiting exactly where you left it, one click away. No drip campaign, no countdown pressure. Just the state of your account, said plainly.
Your data export caught up with everything Anvil learned this summer
The one-file backup under Settings, Account was complete when it shipped in June, but Anvil has grown a lot since: order numbers, the made-to-stock shelf, tracked quotes, saved templates, assemblies, business profiles, price history, achievements, and the bookkeeping that stops a marketplace re-sync from double-recording your history. None of that was in the download. Now all of it is, in the same single JSON file, along with a list of your connected shops (minus their passwords and tokens, which are never exported and get re-issued when you reconnect). If you keep backups, download a fresh one.
Three finishing touches across the weekend's work
The price-changes readout now shows on every craft's Seller dashboard, not just 3D printing (the weekly snapshot always covered every craft; the card just hadn't reached the other eleven). The inventory Make list now estimates non-3D products too, using each product's saved hands-on minutes and labeled as such, so a soap maker's deficit line reads "~2h hands-on" instead of nothing; only real printer time feeds the done-by date. And a refund on your own website now reaches from-stock orders: a unit that shipped straight off the shelf used to need its refund recorded by hand, but the site's refund webhook now finds the sale through its order number and reverses it, with the goods' fate (loss, or back on the shelf) still your call on History.
X-Large, XX-Large, and inch sizes all detect properly now
Dropping plates named X-Large or XX-Large used to lump them in with Large: the hyphen split the name apart and the size detector only saw the "Large" half. Fixed, through 5XL, and every spelling of a size now counts as the same size (XL, X-Large, and Extra Large are one group, not three). Dimension sizes work too: name a plate 4'', 6in, 4.5 inch, or 100mm and it's detected and ordered by physical size, decimals intact (a bare number without a unit is deliberately NOT a size, so a "Planter 2" doesn't become a two-inch pot). The same vocabulary now drives the catalog's size ordering and Etsy order matching, so an incoming X-Large order lands on your X-Large variant instead of tying with Large.
Quotes now charge the same price as your catalog
The quote builder was the one pricing surface that skipped the learned per-product failure rate: a product running hot (5 or more finished jobs with real failures) priced higher on its catalog card than on a quote, so quoting it undercharged. Quotes now apply exactly the rule the catalog uses, learned rate when it's on, your assumed buffer when it's off, so a quote line always equals the catalog price to the cent. Heads up: if you have hot products, their quote totals rise to match the catalog. That is the fix, not a bug; they were quietly underpriced before.
One learned-rate window, said plainly everywhere
Every learned failure rate on your bench is measured over one window: the 30, 60, or 90 days set on your default assumption set. The screens now say so honestly. The window picker lives only on your default set's form (other sets show the window read-only, since theirs never drove the data), catalog cards quote that same window in their observed-rate note, and the Insights buffer tune-up card now measures over your chosen window too instead of a fixed 90 days, so it can never disagree with the nudge on Settings. Signing in while already signed in also stopped showing a login form: visiting the sign-in page just takes you back to your workbench, and the footer's "Sign in" link is now session-aware like the header.
Signed in stays signed in, everywhere
Wandering from your workbench onto a public page (the calculators, pricing, the math) used to greet you with a "Sign in" button even though you were still signed in, which read like you'd been logged out. You never were: those pages just didn't check. They do now. When you're signed in, every public page's header shows "Your workbench" and takes you straight back home.
The learned failure rate is yours to use, or just to watch
When a product racks up 5 or more finished jobs, Anvil learns its real failure rate and, until now, always folded that into the product's price. Some makers want that; others use the learned rate as a warning light and price on their own assumed buffer, so a rough patch of failed prints doesn't quietly push a product's price up. That is now your choice. On Settings, under Assumptions, a new switch decides whether a product's learned failure rate is used in its price or kept as a signal only. With it off, every price (catalog, estimates, quotes, exports) uses your assumed buffer, and the catalog card still shows the real observed rate so you always know when a product is running hot. You can also pick how far back the learned rate looks: 30, 60, or 90 days. A shorter window reacts faster to a fresh problem and forgets an old one sooner; the 5-jobs minimum still applies, so a shorter window simply makes the learned rate engage less often and heal faster.
Recording a sale shows the price before you save
The "Sold for" box on a finished job now starts filled in with the price the sale would record at (your listed price), instead of leaving it blank and filling that number in behind the scenes. If a product's price is running high from a recent string of failures, you see that number and can correct it before recording, rather than booking revenue you never looked at. Leave it as-is to record at list, or type what the buyer actually paid.
The print queue reads first-in-first-out at a glance
Three fixes for a queue that seemed to shuffle itself. Reprints now keep their place in line: failing a print and requeuing it used to restamp it as brand new work, sending it to the back of the queue and making its whole project jump around the board. A reprint now inherits the original attempt's queue time and drag position, because it's the same work. Every card in the queue wears its position (#1, #2, #3) in the exact order the board renders, and the head of the line gets a NEXT UP tag, one slot per idle machine, so what to grab when a printer frees is never a judgment call. And order-driven work now shows the date the customer actually placed the order (with the waiting age measured from it), the one date that never moves no matter what happens in the shop.
Pick your default stores once, in Settings
Each shop on Settings now has a "List new products here by default" checkbox. Tick your usual stores and every estimator pre-checks them when you save a new product, on every device you use. The estimate screen still remembers the exact set from your last save on each device (that most recent choice wins there); the Settings default is what a fresh device or the other estimators start from. Existing products are never touched.
Saving an estimate lands you on the new product
Save from an estimator and the catalog now opens with your new product as the focus: its collection expands, the page scrolls to it, and it glows for a moment so there's no hunting for what you just made. Everything else starts collapsed. Collections also stop remembering that they were open last visit; the catalog starts folded every time, and only what you open stays open while you're there.
Every estimator: the price rides along on desktop
The two-column desktop layout from the 3D estimate screen now reaches every form-driven estimator: laser, resin, candle, soap, vinyl, embroidery, sewing, crochet, pottery, woodworking, and jewelry. On a monitor your inputs sit on the left and the price breakdown and save box ride in a column on the right that stays with you as you scroll, so tuning a number and watching the price move never means scrolling back down. Phones keep the same single column as before.
Slimmer, theme-colored scroll bars
If your system shows scroll bars all the time (common with a mouse plugged in), Anvil used to wear the chunky grey system bars. Every scrollable area now uses a slim, rounded bar in the app's own colors on a clear track, and purely decorative ones (like the sidebar) hide their bar entirely while still scrolling.
The installed app opens a touch quicker
The installed Anvil app used to load its launch page and then redirect on to your home, so tapping the icon meant two page loads every time. It now opens straight to your home in one load. If the app ever looks like it loads more than once, that is usually your catalog waking up a sleeping database on a cold open, not a reload.
Add a made product straight to your shelf
Made something for stock without queuing a job for it? Inventory now has an Add to shelf card: pick the product and how many, and each unit lands on your made-to-stock shelf at its cash cost, ready to sell. Because you actually made it, the materials and hours count as used. For a 3D product you can set the spool each part was made in, so the right color comes off your tracked stock (it defaults to the part's saved color, and a color-locked part stays fixed on its own). No more queuing and clicking a job through just to stock a unit. If you add one by mistake, deleting its job from the board puts the materials back.
See the labor Anvil learned from your jobs
For the crafts where you enter hands-on minutes, once a product has five finished jobs with a real time logged, pricing already uses the median of those times instead of your original estimate. Now the catalog card says so, right under the failure line: Learned labor N min, median of M jobs, used in pricing. The number you saved stays put on the edit form; this just shows you when the learned figure is the one driving the price.
Pin the worlds you work in
The forge floor (the world switcher) now lets you PIN the crafts, trades, and services you use most. Hover a world and click the pin, and it stays in a Pinned row up top, one tap away no matter how the recents shuffle. Pins are saved on your device. Searching the floor also got a small upgrade: press Enter and it steps straight into the top match, the same as the command palette.
A rough patch stops taxing your prices forever
Once a product has five or more logged jobs, Anvil prices it off your real observed failure rate instead of the assumed buffer. That number now only looks at the last 90 days. A bad run you have since fixed (a warped bed, a cursed spool, a stretch of failed prints) ages out on its own instead of inflating that product's price for good, and if a product drops under five recent jobs the assumed buffer takes back over until there's fresh data. The catalog cards spell it out: "Observed X% failure (N jobs in the last 90 days)."
A calmer Edit details form
A 3D product's Edit details had grown into a wall of twenty fields. It now leads with the essentials (name, collection, printer, material, weight, hours) and folds the rest into three labeled sections: Selling & shipping (where it's listed, fulfillment, ships-in boxes, stock), Print details (colors, quantity, plates, color lock), and Parts / components. Each closed section shows its current values on the header line, so you can read the whole product without opening anything, and everything still saves exactly as before. Every other craft's edit form got the same treatment: shop listings and parts now sit in the same tidy collapsed sections there too.
Hide the sidebar
The hamburger button in the top bar now works on desktop too: click it to tuck the sidebar away for a full-width workspace, click again to bring it back. Your choice sticks across visits. The top bar's quick actions (Estimate and the dashboards) keep you moving while it's hidden.
See your dashboards in another currency
The seller and hobbyist dashboards gained the same "Show prices in" switcher the catalog has: pick a currency and every figure converts at once, revenue, take-home, cost, fees, the revenue pulse, and the leaderboards, approximate at rates as of June 2026, with your saved numbers untouched. The free, no-sign-in demos at /try got it too, so you can price your craft in your own currency before you ever make an account.
The money lens runs on actuals
A sold unit's cost now comes from the job's real consumption (the grams it actually ate, the hours it actually took, the exact spool it ran on), not the catalog spec. Editing a job's actuals moves every dashboard number; an untouched job still matches the catalog to the cent. Sold 3D jobs also show a per-sale take-home line right on the jobs page.
Parts and components
Products can carry purchased parts (screws, magnets, LEDs, hooks) on every craft. Their cost flows through the price suggestion and the seller dashboards, and finishing a job decrements them from inventory.
See prices in any currency
A display-only currency switcher across the catalog, all estimators, the launcher, and quotes, plus a standalone converter tool. Rates are dated and approximate by design; your saved numbers never convert behind your back.
Sales truth
Every finished job (or whole project run) records what happened: sold on which channel, or moved to stock. The dashboards stopped assuming everything sold at list. Money numbers got real on every craft.
Other
4September 28, 2026
Sync works again after you delete a variation in Etsy's editor
Deleting a variation in Etsy's editor wipes every price and SKU and leaves prices linked to both remaining properties. Etsy then insists that SKUs are linked to both as well, or to neither, and Sync used to declare them on the size alone and get refused. Sync and Add sizes now follow the listing's own wiring, so the one-confirm rebuild lands: prices back on policy, SKUs stamped, and the add-on rows added. The planting guide also ignores add-on rows when it names the sizes a listing sells.
The push panel fits a phone
The Etsy price push panel now keeps its price columns on screen at phone width: size labels wrap instead of pushing the new price off the edge, the color count sits under the label, and each size's change rides under its new price. The explainer text moved behind a small info button next to the heading, so the rows come first.
Push all skips the listings it cannot write instead of stopping
The drift view's Push all walks every drifted listing in turn and used to halt after three refusals in a row. A listing Anvil cannot write at all, such as one carrying a third variation property or one with no catalog match, now counts as skipped with the reason beside its name, and the walk carries on. The three-in-a-row stop still guards against a rate limit or a dropped connection.
Add-on rows keep their price on size-first listings
When a listing's size comes before its color, the price push and the drift cards could read a size + add-on row as the plain size and offer to price it at the plain price, wiping the add-on's extra. The add-on marker is now read on each variation value on its own, so a row like Drop-in 10 inch pot + 6 stakes / Desert Sand prices at the plain size plus the add-on on every listing shape.
Soap making
2August 3, 2026
Soap batches count order-level costs once, not once per bar
A soap batch is priced per bar and multiplied by the bars in your mold. A few costs belong to the whole order rather than to each bar: the postage on a remake, the cost of a replacement you sent, the channel's fee on the buyer's shipping and tax, and the real carrier cost when you enter it. Those were being multiplied by the bar count too, so on a twelve bar loaf a single postage charge was counted twelve times and take-home read low. They now land once. Nothing changes for a mold that makes one bar.
A soap batch shelves every bar now
Soap is priced and sold by the bar, but the made-to-stock shelf counted a finished batch as one unit at roughly one bar's cost, so a 12-bar loaf read "1 on hand", an order for two bars could wipe the line, and the shelf's value undercounted your oils. Fixed everywhere the shelf moves: finishing a batch to stock (or adding one on the inventory page) now puts every bar in the mold on the shelf, each at its per-bar cash cost; orders pull bars; deleting a batch or undoing a refund removes the same bars it added. The Make list thinks in batches too: a 20-bar deficit on a 12-bar mold queues 2 batches, with the hands-on estimate paid per batch. If you truly sell whole loaves, set the mold's bars per batch to 1 and nothing changes.
Selling
60July 22, 2026
Syncing Etsy can't blank the jobs page anymore
A long Etsy sync (lots of orders, or the fuller listings mirror) could outlive the server's time limit for the jobs page: the sync kept going, but the page never got its answer back and painted blank. The routes that run syncs now get the same generous time budget as the rest of the long-running work, so the sync finishes and the page comes back with its usual counts.
A slow Etsy response can't freeze the page anymore
Actions that talk to Etsy (stamping SKUs, syncing sizes, pushing prices, creating drafts) used to wait forever if Etsy stalled, and while one waited, every other click on the page quietly queued behind it: links looked dead, refresh spun endlessly, the page read as frozen. Every Etsy call now gives up after 30 seconds and tells you what happened instead, so one slow response can never wedge your whole tab again.
Etsy orders find the right size on their own
Two order-matching upgrades for shops moving onto the size ladder. First: an order carrying inches ('6 inch', a size like 'XX-Large 12"') now matches the ladder letter that IS those inches - the buyer's number outranks the word, so a 12" order can never land on the 10" product just because the words lined up. Second: orders whose size genuinely can't be read now show exactly what the buyer picked ('Ordered as: ...') on the review screen, and the 'had no awaiting job' count from a sync is now a list you can open - title, price, and date per sale - instead of a mystery number.
The SKU page remembers what you already did
Working through a catalog of listings, it was easy to lose track of which ones you had already stamped, synced, or re-priced. Each linked listing on the Etsy SKUs page now carries a quiet line reading like "SKUs stamped just now · sizes synced 2h ago · prices pushed 2h ago", read from the same audit ledger every Etsy write already lands in. Stamping SKUs also records itself there now (it was the one Etsy write that left no trace).
Connecting a shop now shows you exactly where the keys live
Square, Shopify, and WooCommerce each hide their API credentials somewhere in a developer dashboard, and finding them was on you. Each connect form now has a "Where do I find this?" expander with the exact clicks: which admin page, which button, which value to copy (and the gotchas, like Shopify only showing its token once). Nothing else about connecting changed — paste the key, done.
Draft a new Etsy listing straight from your catalog
The new Draft on Etsy page (under Catalog) turns an approved catalog product into a ready-to-review Etsy draft in one screen: size variations priced by the engine through your Etsy fees, SKUs where you've stamped them, and your product render attached. Instead of a blank form, you clone one of your existing listings as the template, so the description, tags, category, shipping profile, return policy, color palette, and even the size wording arrive pre-filled and editable. The listing is created as a draft: invisible to buyers, reviewed and published by you inside Etsy (Etsy's listing fee applies when it goes live). Anvil never publishes anything on its own.
Stamp SKUs onto your Etsy listings in one click
SKUs are how Anvil matches an Etsy listing to your catalog exactly: the price-drift watch, the one-click price push, and order matching all read them before falling back to guessing from titles. The new Etsy listing SKUs page (under Catalog) shows every live listing in three buckets: listings already linked by SKU, listings paired with a product and ready to stamp, and listings that need you to pick their product from a dropdown (that pairing is remembered and improves order matching on its own). Stamping writes a BRAND-MODEL-SIZE SKU per size onto the Etsy listing and into your catalog, fill-only: an existing SKU on either side is never overwritten, it's shared with the side that lacks it. Rows that can't be matched to a size are left untouched.
Push a drifted price back to Etsy in one click
When the price-drift watch flags an Etsy listing that fell behind your costs, the Insights card now carries a Push to Etsy button. It fetches the live listing, shows every variation's current price next to what the engine suggests (sizes matched by SKU first, then by size name; anything Anvil can't match confidently stays exactly as it is), and only writes after you confirm. Every push is recorded: who, when, and each price's old and new value. Nothing is ever pushed automatically or on a schedule; the button and its confirm screen are the only door. Needs your own Etsy listing connection from Settings.
Connect your own Etsy app for listing management
Settings now has an Etsy listing connection under Shops & Fees: create your own Etsy app, paste its keystring and shared secret, register the callback URL shown in the setup steps, and authorize it with listing permissions. This is the write channel the upcoming one-click tools act through: pushing a drifted price back to Etsy, and drafting new listings straight from your catalog. Keys stay on the server, masked in the UI, and never leave in your account export. Anvil never changes a listing on its own; every push will be a button you press, with a confirm first.
Insights now catches Etsy prices that fell behind your costs
Costs creep: filament prices move, rates change, the failure buffer learns. Your Etsy listing keeps whatever price you set months ago. Every hourly Etsy sync now also reads your shop's live listing prices, and Insights compares them against what the engine currently suggests for each product, priced through your Etsy fees. When a listing sits meaningfully below suggested, you get a card naming the listing, both prices, and the gap you leave behind on each sale. It only flags listings priced too low: a sale sticker posted above suggested is a deliberate choice and stays quiet. Matching uses your product SKUs first, listing titles second, and skips anything ambiguous rather than guessing.
Connected shops can queue made-to-order work now
Square, Shopify, and WooCommerce orders have always synced in as finished sales, which is right for a point-of-sale counter where the item already left with the buyer, and wrong for a made-to-order shop. Each connection now has its own switch: turn on "Queue made-to-order items on the jobs board" and a synced order behaves exactly like one from your own website. Items you stock ship off the shelf and record immediately; items you make land on the jobs board as jobs or runs, labeled with the order number, and record their sale automatically when you finish them, honoring your shop's fulfillment mode and any per-product override. The switch is off by default, so nothing changes until you flip it, and the new-order email covers these too.
The cha-ching: an email the moment an order lands
Orders from Etsy, your own website, and connected shops used to land on your jobs board silently, found whenever you next looked. Now each new order sends one email the moment it arrives: what sold, through which channel, and whether it came off your shelf or is queued to make. A make-to-order commission can't age unnoticed anymore. On by default with a one-click unsubscribe in every email, and its own switch under Settings, Account, alongside the other email preferences.
Anvil remembers your big month
If last November sold three times your average month, that wave is coming back, and until now Anvil watched it happen without saying anything. Insights gained a seasonality heads-up: when a genuinely hot month from last year is a few weeks out (or already underway), a card says how big it ran and points you at your shelf targets and the Make list so stock is ready before the rush instead of during it. It stays quiet unless there's a real prior-year spike to point at.
Price changes get a memory, and an honest readout
Anvil prices your catalog perfectly but never remembered what it used to charge, so "did that price raise slow my sales?" had no answer. Now a weekly snapshot logs each listing's price, keeping a row only when the price actually moved, and the Seller dashboard shows the readout: the change, when it happened, and units per week before versus after, measured over same-length windows on both sides. It only speaks when there's enough time and enough sales for the comparison to mean something, and it deliberately stops short of advice: seasonality and better photos move numbers too. You get the facts; the pricing call stays yours.
Quotes become records: statuses, expiry, deposits, and one-click queue
A quote used to be a printable page and nothing more: send it, and there was no record of what you promised, to whom, or whether they ever answered. Now the printable page has a "Save & track" button that freezes the quote's exact numbers into a ledger with a real Q-number (a sent quote is a promise, so its prices never drift under you; a Reprice button refreshes them deliberately). The new Quotes page shows every tracked quote with its status (sent, accepted, declined, expired), an expiry date so follow-ups don't slip, and deposit tracking for commissions: what you asked, whether it's been received, and what's still outstanding. When a quote is accepted, one click queues its items onto the jobs board, labeled with the Q-number and client. A deposit is never counted as revenue by itself; it's simply part of the sale's price when the work sells. Building and printing a quote stays free; saving and tracking the ledger is Pro.
The shelf tells you what to make: restock targets + a Make list
Your made-to-stock shelf was just a count, so a shop selling from stock could quietly sell a product to zero. Each shelf line now takes a "keep N stocked" target, and any product below it lands on a Make list at the top of the shelf: how many to make, the estimated print time and filament to close the gap, and one click to queue them as ordinary make jobs (finish one, answer "made for stock", and it's on the shelf). The list also reads your live queue and says roughly when it all lands if you queue it now, so "can I be restocked by Saturday's market?" has an answer. Products below target show up under Insights' Running low too, right next to the materials forecast.
Your own website's orders now carry true fees, like Etsy's do
When your own Stripe-checkout site sends an order to Anvil, it can now include what the buyer paid for shipping and the sales tax the site collected. Stripe charges its roughly 2.9% on the whole shipping-and-tax-inclusive total, not just your item price, so those dollars were quietly missing from every own-site order's fees; Etsy orders got this exact fix earlier in the summer. Send the two amounts (the setup snippet gained three lines) and each order's recorded fees include the processing cut on them, your History cards show what the buyer paid to ship beside your own label cost, and a multi-item website order now groups into one numbered order card. Sites that don't send the amounts record exactly as before.
Match orders to products by SKU
Website and shop-connector orders match to a catalog product by name, which is fragile when a listing gets renamed. Now each product can carry your own SKU (on the 3D Edit details form, under Selling and shipping). Stamp that SKU into your site's Stripe metadata or your Shopify/WooCommerce line, and an incoming order matches EXACTLY by SKU, falling back to name only when there's no SKU. It's optional: leave it blank and everything matches by name exactly as before.
The Etsy statement now fills in your shipping label costs
Etsy's API doesn't share what a shipping label cost you, which meant hand-typing postage on every sale. The monthly statement has every label with its order number, so the statement importer now matches them up and fills each sale's Shipping paid automatically, but only where it's still blank: anything you entered by hand wins, and re-uploading stays safe. An order that shipped in two boxes gets both labels summed into one true figure.
A tidier Shops & Fees, with secrets hidden
The connector sections (Your websites, Square, Shopify, WooCommerce) now collapse to one line each, so the tab isn't a screen of exploded forms; a section pops open by itself when it has something to show you, like a fresh sync result or a just-added site's credentials. Website secrets render masked with an eye to reveal and a copy button that grabs the real value either way.
Your logo on every client-facing document
Each business profile can now carry a logo (Settings, then Business, drop an image on the brand). It prints in the header of that brand's invoices, proposals, quotes, price sheets, and the year-end tax pack, in place of the Anvil mark. Big images are fine: we shrink whatever you drop to a small crisp mark. Run several brands? Each gets its own logo, and the right one prints per document, same as the rest of the identity.
Answering an Etsy size review now sticks
When an Etsy order carried a size Anvil could not read, the review card asked you to pick the right size, saved your answer, and then asked again on the next sync, forever. Your saved answer now covers unreadable sizes too, so the card clears once you have answered it. Orders where the buyer picked a readable size still follow the buyer's choice, never the saved answer.
Search History by order number
The History search now matches the order number printed on the card, not just product names and job labels. That includes local order numbers (RCJ-1019 and the like), which live on the order itself rather than on any job, so they were unfindable before. Typing just the digits works too.
Download your sales history as a CSV
History has a Download CSV button now: every recorded sale with its order number (the real Etsy number where there is one), product, channel, price, the frozen listed price and fees from record time, shipping paid, and refund details. Made for lining your books up against a marketplace statement, or just for your own spreadsheet.
No more empty order numbers left behind
Deleting a job, marking a done job as failed, or re-recording an order could leave the old order number sitting empty in History. Every path that removes or re-records a sale now cleans up an order it left empty, so History only shows orders with something in them.
Sales shipped from your shelf cost what the shelf said
An order filled from your made-to-stock shelf used to book its cost from a fresh re-price at sale time, while the shelf released the units' real weighted-average making cost. Those are now the same dollars: the sale's frozen cost basis is rewritten to exactly what came off the shelf, so your inventory asset and your cost of goods always reconcile. Applies to website and connector orders, and to flipping a stocked item to sold by hand.
Find an order in History by its order number
Searching History for an Etsy order number (or any order reference) used to come up empty: the search only matched product names. It now also matches a product's collection and size, and the order label on the job that made it, so typing "Etsy #123456" pulls up exactly that order's work.
Refunded returns go back on your shelf
When you refund an order, there's now a third choice for what happened to the goods: you still have the item (returned, or never shipped). Pick that and the item goes back on your made-to-stock shelf at the cost it was made for, ready to sell again, right next to "never made it" (nothing lost) and "it's gone" (count the cost as a loss). Undoing the refund takes it back off the shelf. Restocks now act like restocks.
Etsy orders can no longer record twice
In a rare lineup (an auto-queued Etsy order for a product you also had finished for stock), the same order could be recorded once against your stock unit by the sync and again when the queued job finished, counting the revenue twice and consuming a shelf unit the order never took. The sync now leaves anything the queue owns to the finish step, so each order records exactly once.
Organize your parts and components by craft
Parts (purchased components like screws, clasps, wicks, or hardware) now belong to a craft, so a 3D printing part no longer shows up on a soap or candle product's edit form. Pick the craft when you add a part in Settings, or choose "All crafts" for something universal like a shipping box, and each product only offers the parts that actually fit it. Your existing parts stay with 3D printing, where they were.
Tag a product as a custom order
Some products are different every time, so guessing what an incoming order means would get them wrong. On a product's Edit details there's now a Custom order checkbox. Tick it and Anvil leaves that product out of automatic order matching from every channel (your website, Etsy, and connected shops), so a custom order never auto-records or auto-queues. You walk each one through by hand, and a small badge marks which products are tagged.
Set make-to-order or from-stock per product
A product can now override its shop's fulfillment setting. On a 3D product's Edit details, pick Make to order, From stock, or Auto, or leave it on the shop's default. So a mostly-make shop can keep a few hot sellers on the shelf (or the reverse), and each incoming order fills that product the way you set it.
Website refunds and cancellations reverse themselves
When an order on your own site is refunded or cancelled, your site can tell Anvil and it reverses cleanly: an order you haven't made yet drops off your jobs board (and any consumed stock comes back), and an order you already finished and sold gets refunded, with its cost booked as a loss. It's retry-safe, so a duplicate notice does nothing. One note: an order shipped straight from stock isn't auto-reversed yet (that's a follow-on).
Sell from stock: orders pull off your shelf
Each shop can now say how it fills orders. In Settings → Shops & Fees, set a channel to Make to order (make each one fresh), From stock (ship off your made-to-stock shelf), or Auto (ship from stock when you have it, else make it). When a from-stock order comes in (from your website feed or any connected shop), Anvil pulls those units off your Made-to-stock shelf and counts their held cost as the sale's cost, so the shelf stays accurate and your margins stay honest. Make-to-order shops are unchanged. Putting new orders straight on your jobs board to make is the next step.
Bring your own website orders into Anvil
If you sell on your own site with Stripe checkout, your orders can flow into Anvil now, the same way Etsy does. In Settings → Shops & Fees, open Your websites, add a brand site, and you get a secret plus an endpoint to drop into your checkout. From then on each paid order records as a sale (matched to your catalog by name, deduped so a retry never double-counts), feeding your dashboards and P&L. Add one per brand and map each to its own shop so the right fees apply. Record-only to start. Sending new orders straight to your jobs board comes next.
Sale mode: see what to post to run a sale and keep your margin
Flip Sale mode on the catalog, set the discount you'll advertise, and every product card shows the sticker to POST so that, after the marketplace takes its cut, you still land where you want. Two goals: 'Hold my prices' marks up so the sale nets your normal price (a cosmetic sale, your take-home unchanged), and 'Target margin' lets you run a real discount down to a floor margin you pick, so you give a genuine markdown without ever selling at a loss. It works across your own price and every marketplace column, and it rounds the stickers to something you can actually post (your own price step, or .99). Nothing is saved (it's a preview). There's also a Sale mode tool under Tools for the quick per-item numbers: take-home, margin, and how deep you can go before anything sells below cost.
Refunds ask the one question that matters: did you make it?
When you refund a sale, that little 'returned to stock / never made' checkbox was easy to skip past, and skipping it quietly counted a never-made item as a material loss. It's now a required choice: 'I made it, count my cost as a loss' or 'Never made it (or returned to stock), no cost lost.' You can't refund without picking one, so your dashboard only ever counts the materials you actually spent. Handy when an order for several items gets refunded but you'd only made some of them.
Connect WooCommerce too
Sell through a WooCommerce store? You can now connect it the same way as Square and Shopify: in Settings under Shops and Fees, paste your store address and an API key pair, and Anvil pulls your orders in as sales, matched to your catalog and priced with each sale's real cost and the channel's fees. It syncs itself a few times a day alongside your other shops, and a re-sync never double-counts. Pro.
See what each shop sync actually did
Your connected shops now show the result of the last sync right in Settings: how many orders were recorded, how many were already in, and which ones couldn't be matched to a product, by name, so you know exactly what to add or rename. It survives a reload and reflects the automatic background syncs too. And if a store's access token stops working, the section tells you and offers a one-click reconnect instead of quietly failing. Pro.
Connect Square and Shopify, and your sales flow in by themselves
Sell on Square or Shopify too? Connect it once in Settings under Shops and Fees (paste an access token from your Square or Shopify account, the same idea as the Etsy connect) and Anvil pulls your orders in as sales, matched to your catalog by product name, with each sale's real cost and the channel's fees figured. It syncs itself a few times a day, so your Seller dashboard and Insights stay current without you clicking anything, and a re-sync never double-counts. There's a Sync now button too if you want to pull immediately. Pro.
Bring your past sales in from another tool
Moving to Anvil from somewhere else and don't want to start with an empty dashboard? On the new Import past sales page you can drop a CSV of your order history (any spreadsheet with a product, a date, and a price), line up the columns once, and Anvil records each order as a sale. Your Seller dashboard, Insights, and profit-and-loss light up from your real history. Each row is matched to a catalog product by name, anything it can't match is shown rather than guessed, and re-running the same file is safe. Pro.
Log a whole market day in one pass
Home from a craft fair with a pocket of cash and no idea what it actually netted you? On your catalog there's a new 'Log a market day': enter the products you sold and how many, once, sharing one date and channel, and Anvil records each unit as a sale at your listed price (or set a price per line). The whole day lands on your Seller dashboard and Insights, fees and costs figured, so you can see what the booth really made instead of guessing. Leave a price blank to use the list price. Pro.
Price for wholesale, with the right math
Selling into a boutique isn't the same as selling on Etsy, and now Anvil knows it. Set a shop's channel to Wholesale and your catalog prices that shop with the marketplace fee tail dropped and a wholesale margin (50% by default, the classic cost-times-two), so you're not accidentally quoting a retail-plus-fees number to a store buyer. Each wholesale price also carries a suggested MSRP for the shop to resell at (2x by default), so you can hand over a price list with a shelf price built in. Tune the margin and keystone per shop in Settings.
Log a sale and see what you actually took home, free
New on your catalog: 'Log a sale'. Tell us what you sold a product for and where, and Anvil does the math you can't do in your head, your real cost plus the channel's fees plus shipping, to show what you actually kept. It lands on your Seller dashboard and lights up Insights, so you can finally see which products make money and which quietly lose it. Free makers can log their first sales to see it on their own numbers; Pro tracks every product and watches for leaks for you.
Etsy fills in your shipping cost for you
Bought a shipping label through Etsy? The next sync now drops what you paid for it straight into that sale's 'Shipping paid', so your take-home reflects real postage without you typing it. It fills single-item orders where you haven't set a shipping cost yet, and it never overwrites a number you entered. Multi-item boxes still get a quick manual split, and if a label wasn't bought through Etsy the field stays yours to fill as before.
Every craft's job cards show your take-home
The 'Took home' line on the jobs board, with your margin and a cost breakdown, used to appear only on 3D prints. Now it shows on a finished sale for every craft: laser, resin, candles, soap, vinyl, embroidery, sewing, crochet, pottery, woodworking, and jewelry. Mark something sold and the card tells you what you actually kept and how it was priced, right there, without a trip to the dashboard. The breakdown rolls each craft's own materials into one 'Material' line, and every total (cost, fees, take-home, margin) is exact.
Partial Etsy refunds adjust the sale on sync
When a buyer keeps an item but gets some money back, the next Etsy sync now reduces that recorded sale by the refunded amount, so your revenue and take-home reflect what they actually paid. Full refunds already reversed themselves; this catches the partials too. To stay safe it only applies on its own when the order maps to a single recorded sale (a multi-item order's partial still gets a quick manual touch on the sale card), and it's capped so a sale never goes negative.
See which printer is your workhorse
Your seller dashboard has a new 'By printer' breakdown: hours, prints, filament burned, and the wear (power plus depreciation) each machine racked up, busiest first. Now that every job records the printer that actually ran it, you can see at a glance which machine is pulling the weight and what each one costs to run. It appears once you've run jobs across two or more printers.
Track damaged remakes, and see refunds at a glance
Two money-truth additions. When a sold item arrives damaged and you reship a replacement (no refund), you can now log a remake on that sale: it books another unit's cost (and the extra postage) against it, so your take-home tells the truth about making it twice. And the seller dashboard now has a Refunds and remakes card: how many orders came back, the money returned, and how many remakes you've eaten.
Fix a stubborn order to the exact size
When a sync matches an order to a product but can't read the size off it, the review screen now lets you pick the exact size in one click, instead of getting stuck. We remember that listing as that size, so it stops coming back as unmatched. Listings that sell several sizes still resolve each order's size on their own.
Refunds reverse themselves, and count the material you lost
Two upgrades to refunds. First, when an Etsy order is canceled or returned, the next sync reverses the recorded sale for you, no clicking required. Second, a full refund of something you already printed and shipped now books that item's cost as a real loss on your seller dashboard, since you're out the filament and the postage. Returned to stock, or canceled before you printed it? Check the new 'returned to stock / never made' box to keep it a clean wash.
Refund a sale when an order comes back
When a buyer cancels or returns an order, you can now refund the sale right from its card on the jobs board. A full refund backs the sale out of your dashboards and P&L entirely, so it stops counting as revenue (and the sales tax you collected reverses with it). Refunded only part of it? Enter the amount and the sale counts at what the buyer actually kept paying. The record stays, badged Refunded, so it is always one click to undo.
Sync Etsy and fix matches right from Jobs
A Sync Etsy orders button now sits at the top of the jobs board, so you can pull new paid orders without opening Settings. And when an order doesn't match a product on its own, the review screen lets you map it to any product in your catalog, not just the close guesses, so nothing stays stuck as unmatched. The size still resolves from each order.
Your Etsy shop syncs itself
Connect your Etsy shop and Anvil keeps up with it on its own. It pulls your paid orders, matches each to the right product (down to the size and color), and records the sale at the price the buyer really paid, coupons and all. Made to order? It queues the job for you in the matched color, and when that print finishes the sale records itself. And it now runs on a schedule, so orders flow in without you ever clicking Sync now. Set it up under Settings, Etsy.
Sale dates that hold still
Editing a recorded sale no longer moves it to today: the original sale date survives price fixes, so your revenue pulse keeps its shape. And every capture (singles and bundles) gained a "Sold on" date, so backfilled sales land in the week they really happened.
Edit a bundle as one sale
A bundled sale's items still live on their own job cards (that's the production view), but the sale now edits as a unit: any member's card shows the bundle ("bundle of 2 · $43.19 total") and opens one editor that changes the channel, fulfillment, total, tax, and shipping for every item at once, re-splitting the total to the cent. Marking a single item to stock still pulls just that one out.
Editing a sale shows its fields
Expanding Edit sale on a recorded sale now opens the whole editor immediately (price, channel, fulfillment, tax, shipping) instead of hiding the fields behind the green Sold chip, which read as a status rather than a button.
Revenue pulse on the seller dashboard
The seller dashboard now charts your money week by week: revenue and take-home for the last twelve weeks, dated by when each sale was recorded. Bar height is revenue, the solid core is what you kept, and the per-shop filter scopes it with the rest of the money lens. Live on every craft's seller view.
Sold bundles
Sold a few pieces to one buyer? Tick the finished jobs (or whole project runs), record one bundle sale with the real total, and the split lands on each item to the cent. The dashboards read it with no double counting.
Real postage, real take-home
A shipped sale can record what you actually paid the carrier. The gap between what the buyer covered and what you paid comes off take-home, so the seller dashboard tells the truth about shipping.
App
36July 20, 2026
Clicks show they landed, and a stuck one can be forced
After saving a big batch of drafts or running a bulk tool, clicking to the catalog could sit for many seconds with nothing on screen - the app was working, but the link read as dead. Navigation links now pulse a small dot the moment you click, for as long as the page is on its way, so you can tell 'working on it' from 'broken' at a glance. And if a click really does get stuck, the dot turns amber and reads 'tap again' after ten seconds: tapping a second time loads the page fresh, which clears a jam that would otherwise hold up every link on the page. This can happen when the app updates underneath a tab you left open, so it is worth reaching for before reloading by hand.
The installed app stops reloading itself on open
If you run Anvil as an installed app, it would quietly reload itself once every time you opened it (a quick flash). That's fixed. It now reloads only when you tap to apply a new version, never on a normal open.
The forge floor: every world on one canvas
Anvil has a new way to move between worlds: the forge floor. Every craft, trade, service, and digital line is laid out as one map, grouped by line. The worlds you actually work in are lit, the one you're in glows, and a tap on any tile drops you straight into its workbench. It has its own full page now (Browse all worlds in the sidebar switcher, or Open the full floor from home), where the whole floor lights up world by world as it loads. The sidebar switcher got leaner to match: your recent worlds plus a search, so a quick switch is one tap and finding a world is one keystroke, with the full floor a tap away when you want to browse. Many worlds, one forge. (You can still switch with the command palette too.)
Quick start comes to makers and digital
Quick start now reaches every form-driven maker craft and the digital line. On the digital estimator, pick a common product (an Etsy printable, a POD t-shirt design, a template bundle, a presets pack) and it fills in the design time, expected sales, and partner base. On the candle, soap, resin, jewelry, pottery, sewing, crochet, woodworking, vinyl, and embroidery estimators, pick a starter product (an 8 oz soy candle, a mug, a resin coaster, a beanie, a cutting board, a cap logo, and more) and the numbers fill in. You pick your own materials and tune, then save. It doubles as a worked example for a craft you haven't tried. (3D and laser stay file-driven: drop your G-code or SVG.)
Delete a whole project (or a queued job) in one click
A wrongly-queued order used to mean cancelling every part by hand. Now a project run has a Delete project button that clears the whole thing at once (and returns any material it used to stock), and a queued one-off has a direct Delete. Handy when an order comes in and you need to start it over.
Etsy orders queue the size the buyer actually picked
Fixed a case where an auto-synced Etsy order could queue in the wrong size if its listing had been pinned to one size earlier. Anvil now always reads the size the buyer chose on each order, matching on both the size word and the inches, and asks you to confirm rather than guessing when a size is unclear.
Combine orders that split apart
If an order ever shows up as separate cards (an older multi-item order whose items recorded one at a time, for example), History can now merge them. Hit Combine orders, tick the cards that belong to the same purchase, and combine them into one order under a single number. It keeps an Etsy number if one of them already has one. Single-item order cards also lost their thumbnail, so they read as clean as the rest of the list.
Imported Etsy orders get their number and combine
When Etsy sales come in through an import or the automatic sync, each one now gets its real Etsy order number, and the items from a single receipt collapse into one combined order on History, the same way orders recorded the moment a job finishes already did. Before this, imported orders could land without their number and as separate cards. (Already-imported orders pick this up the next time you run Number my past orders in Settings.)
Multi-item orders read as one order
When a single purchase has more than one item (two planters on one Etsy receipt, say), History now collapses them into one order card: the order number, the combined total, the channel, and a Needs shipping flag if it applies, with each product nested inside. And while a multi-item order is still being made, its finished items wait under a new Open orders section instead of asking 'Did it sell?' too early. The whole order records as one sale once every item is done.
Every order has a number now
Orders that come from a marketplace keep their own number (your Etsy order number, say). Orders without one get a clean, counting-up number built from a short shorthand you set in Settings -> Workbench, so yours might read RCJ-1001, RCJ-1002, and so on. History leads each order with its number, and a 'Number my past orders' button in Settings gives your existing orders one too.
See what's left to ship at a glance
History now flags sold orders you haven't shipped yet. A sold, set-to-ship order with no shipping cost entered gets a Needs shipping badge, a banner pops up the moment one lands so nothing slips past unsent, and a filter pulls up just those orders. Enter the shipping cost in Edit sale (or switch it to picked up) and the badge clears.
Run more than one business? Add them all
Business profiles are a list now, not a single identity. Keep one per brand (a parent company plus its shops, say), mark one as your default, and link a brand to a shop so that shop's quotes print it. When you build a quote you pick which brand it's from; invoices and proposals use your default. Everything stays optional, and a blank field still doesn't print.
Capacity planning works beyond 3D
The capacity planner used to be 3D-only. It now plans any craft that ties up a machine over time: 3D printers, laser cutters, embroidery machines, kilns, sewing machines, and woodworking tools. Run more than one and you get a section for each, with its own machines, queue, and 'can I promise it by?' check. Crafts that don't tie up a machine (candles, soap, jewelry, and the like) aren't scheduled, since there's nothing to wait on.
Settings only shows what you actually use
The settings hub now hides sections that don't apply to your shop: a soap maker won't see Printer sync, a contractor won't see Etsy, and a maker won't see trade bid rates. Work in more than one line (say 3D plus a trade) and everything relevant shows up. Nothing is locked away. A section just reappears the moment you start using that line.
Settings, reorganized into sections, plus a business profile
Settings used to be one long row of tabs that wrapped and hid the structure. It's a clean landing now: grouped tiles (Your bench, Your pricing, Selling & channels, Account) that open into each section, so it stays tidy as we add more. New too: a Business profile, under Your bench. Fill in your business name, address, phone, email, website, a default payment link, and a tax id, and they print on the documents you hand to clients (invoices, proposals, quotes), which used to show only your workbench name. All optional, and a blank field just doesn't print.
Choose which emails we send you
Email preferences in Settings -> Account split into separate switches: the weekly leak digest, low-stock alerts, and product news. Low-stock alerts used to ride along with the digest setting; now each has its own toggle, and each email's one-click unsubscribe turns off the right one. All default on, so nothing changes unless you opt out.
Every estimator now links to the math behind your price
The pricing engine has always been fully published at The math, but that link only showed on the public demo. Now every craft's estimator, and the digital one, carries a short note right under the price breakdown: see exactly how each line is figured, and tune the numbers to your own shop with the tuning guide. Same honest, auditable engine, now one click away from wherever you happen to be pricing.
Achievements got deeper, and digital makers have their own
More milestones to chase. A new Time track rewards the hours you put into finished work, with rungs all the way up to a 5,000 hour capstone, so even a heavy maker has a real long-haul goal. A Showcase pair rewards photographing your catalog. Contractors get a Business set (clients added, invoices sent and paid, bookkeeping) to match the maker money badges. And the digital and print-on-demand line now has its own track: build your product library, offer both downloads and print-on-demand, and group products into lines. One more thing: the filament Color badges only show if you actually print in 3D now, so a soap or pottery maker isn't staring at three badges they can never earn.
The jobs board speaks your craft, and tidier inventory
The 'now' tile at the top of the jobs board used to say 'Printing now' for everyone. It reads in your craft now: 'Curing now' for soap and resin, 'Cutting now' for laser and vinyl, 'Firing now' for pottery, and so on. The filament trend and total-used panels tuck into one 'Filament history' section you can collapse, so the part of the board you act on stays up top. Inventory got a cleanup to match the rest of the app, plus a 'Forecast soon' count for items trending toward a reorder before they're actually low.
Log a sale lives on History now, and the catalog is tidier
Recording a sale moved off the catalog and onto History (renamed from Completed), since that's where a logged sale lands, so the whole loop is in one place. History is open to everyone now: log a sale there for free and see your logged sales, with the print queue and dashboards as the Pro upgrade. The catalog itself got a cleanup too: once you have products it leads with your shop name instead of the setup blurb, the currency switcher moved up into the header, the shop filter became one multi-select dropdown instead of a long row of pills, and Import, Export, and Price sheet collapsed into a single Data menu.
A restock list that tells you what to buy, before you run out
The top of your inventory now leads with a Restock list: everything that needs buying, across every craft, in one prioritized place. It shows what you're out of, what's at or below its reorder point, and (the new part) what your recent usage says will run low soon, so you can order ahead instead of scrambling mid-project. Each line carries its pace forecast right next to it, and a Copy list button hands you the whole thing as plain text to paste into a supplier order or your notes. Pro.
Inventory now forecasts when you'll run out
Each tracked material shows how long it'll last at the pace you've actually been using it: 'Reorder in about 2 weeks' while you're stocked, or 'about 4 days of stock left' once you're getting close. It learns from your real job consumption over the last couple of months, so it's your pace, not a guess, and it stays quiet until there's enough history to be honest about it. It pairs with the new low-stock emails: you see it coming on the page, and get the nudge when it lands. Pro.
Get an email when a material runs low
Set a reorder point on a material and Anvil now emails you the moment a finished job drops it to (or below) that line, so you can reorder before you run out mid-project. It names exactly what's low, how much is left, and how long it'll last at your recent pace (so you know whether to order today or this week). It's a one-time nudge when stock dips low (not a repeat on every job after), and a job that crosses several materials at once sends one tidy email. The reorder point is the opt-in: no reorder point, no email, and there's an unsubscribe link in every one. Pro.
Every way to import, in one place
There's a new Import page that gathers every way to bring your data into Anvil: your product list, past sales, filament, expenses, clients, and stock levels from a spreadsheet, plus the Square, Shopify, WooCommerce, and Etsy connectors. One screen to find the right importer instead of hunting through Settings and the catalog. Connected shops show a 'Connected' badge so you can see what's already hooked up.
Import expenses, clients, and stock levels from a spreadsheet
Three more importers join the catalog and past-sales ones. Bring your expenses in from a CSV (it round-trips with the expense export), your client list with a name-and-email match so you don't create duplicates, and your inventory stock levels matched to the materials you already track. Each one lines up the columns for you, shows a preview before anything changes, and is safe to run twice. Expenses and Clients are Business; stock levels are Pro.
Import your whole product list from a spreadsheet
Got a catalog already built in another program? On the Catalog there's a new Import a CSV. Upload your product list, line up the columns (Anvil guesses them for you and you can fix any), see a preview of exactly what will be added or updated, then bring the whole thing in at once. Re-importing a corrected sheet updates your existing products instead of duplicating them. Each imported product is priced through the same engine as one you'd enter by hand. 3D printing for now.
A clearer Jobs board: an In progress section
A fix to the Jobs board. Finish one plate of a multi-plate project and it no longer drops back to the bottom of your print queue. It gets its own In progress section near the top, so a half-done project is easy to find and pick back up. Awaiting sale now reads as the 'done, just record the sale' step it actually is.
See when your printers free up, and what you can promise
There's a new Capacity planner, linked from Jobs whenever you have a 3D queue. It reads your live queue and each job's expected time and projects when every printer is next free and when each queued print will finish. Unassigned prints land on whichever printer opens up first. It also answers the question you actually get asked: enter a new print's hours and a date, and it tells you the soonest it would be done and whether that beats the deadline, before you say yes to the customer. Planning estimates, 3D printing for now. Pro.
Inventory tells you what you OWE, not just what's low
When a spool runs past empty, your inventory used to show a red 'Low' just like an item merely approaching its reorder point. Now a negative balance reads 'Short 2,300 g' in red, the actual amount you owe and need to buy back, while a still-positive item near its reorder point gets a calmer amber 'Low'. Two different situations, two different signals.
See what's new without leaving the workbench
The workbench ships almost every day, but you had to visit this page to find out. Now there's a small sparkle button up in the top bar that lights up whenever something new has landed since you last looked. Click it for a quick list of the latest changes, with a link to the full story here. It clears itself once you've peeked, so it only nudges you when there's genuinely something new.
See what each project netted you on Completed
The Completed page now groups a multi-part product (say a planter's top and bottom) back into one project card, the same way the active jobs board does, with the combined took-home, margin, cost, and a Breakdown link. Single finished jobs still show their own line, and search now matches a project by its name or any of its parts.
Home tiles jump you to the right spot, and a kinder save limit
The stat tiles on your home screen now deep-link to the matching section of the jobs page (In queue, Making now, Awaiting sale) instead of dropping you at the top, and the strip hides itself when every number is zero. And on the free plan, hitting the catalog limit while pricing a dropped file no longer bounces you to billing and loses the estimate: it shows an inline upgrade prompt and keeps your work right where it is.
An account menu, and a friendlier first run
Sign out moved off the lone top-right button into an avatar menu with Settings, Billing, and Sign out, so it is harder to mis-tap. On a phone the header now shows your workbench name and craft instead of an empty bar. The onboarding craft picker is grouped by maker crafts, trades, services, and digital instead of one long list, and buttons now show a spinner the moment you tap them so nothing looks frozen.
Finished jobs move to Completed
The jobs page is your production line now: what needs you, what's queued, what's printing, and what's awaiting a Sold? call. Finished and canceled jobs moved to their own Completed page (it was always there, just buried in a link at the bottom) and it now sits in the sidebar under Jobs. When your queue is clear, the board says so and points you to Completed.
A guided first look
New accounts get a short spotlight tour of the bench: the workbench switcher, the quick actions, the business shelf, your home base, and the Cmd-K palette. Five steps, skippable, never nags twice. Replay it any time from "Show me around" on the get-started card.
Jump anywhere with one keystroke
Press Cmd-K (or Ctrl-K) anywhere in the app for the new command palette: jump to any page, fire a quick action, switch workbenches, or open a calculator, all from one searchable box. The home cockpit also gained a production pulse (your finished work per week over the last twelve weeks), and new accounts get a short numbered path to their first honest price.
Trades
5July 19, 2026
Trades: real visits, a crew roster, and day-before reminders
A won job used to carry one fuzzy window. Now it carries visits: real time slots (or all-day blocks spanning several days) added right on the job, so a two-visit fence build blocks Tuesday morning and Friday, not one vague stretch. Save your crew as a roster in Settings and pick people per visit; anyone booked onto two overlapping visits gets flagged as double-booked. Every evening you get one email listing tomorrow's visits, and a linked client with an email on file can get a one-click heads-up about the next visit (always your click, never automatic). The month calendar and agenda stay in step: the job's overall window re-syncs from its visits as they come and go.
A month calendar for your schedule
Schedule now has a Calendar view alongside the agenda. Flip to it for a month grid of your won work: each job sits on its start day and spans its estimated days, tinted by status (scheduled, on site, done). Page through the months or jump back to today, and click any job to open its bid and edit the schedule. The agenda is still the default for what's next; the calendar answers where it all lands.
Save a bid as your own Quick start template
Finished a bid you'll do again? Save it as a template. The Save as template button on any bid captures your exact line items, scopes, and tuned rates, and it shows up under Your templates on the bid page, above the built-in common jobs. Start one and it drops in a fresh bid built from your numbers (no region or union question, since the figures are already yours), fully editable. Delete one any time. A contractor who does the same remodel over and over now starts from their version, not a national baseline. Saving a template is a Shop / Business feature; reusing one is free.
Quick start: build a bid from a common job
Trades have a new Quick start on the bid page. Pick a common job (a full bathroom remodel, a cedar privacy fence, an asphalt re-roof, a 3-bedroom repaint, and more), answer two quick questions (where the job is, and union or not), and Anvil drops in the usual scopes and line items already priced at 2026 national starting rates. You get a mostly-done bid instead of a blank page, and every line stays yours to tune. Starter prices are researched and cited on the Sources page. More trades to come.
Schedule the work you've won
Trades have a new Schedule page. Every won bid shows up to slot onto a calendar: pick a start day, rough number of days, who's on it, and any site notes. Your work then reads as a plain agenda (on site now, behind, today, this week, upcoming, and won jobs still to schedule), and you move a job from scheduled to on site to done in one tap. A done job leads straight into an invoice, so the whole loop is bid, win, schedule, do, bill. The Pipeline also gains a This week strip. Scheduling is a Shop / Business feature.
Business
4July 11, 2026
Reconcile your own site's Stripe payouts against Anvil
The Etsy statement importer proved Anvil matches Etsy to the cent; now your own websites get the same checkup. Upload a Stripe Balance history export (Balance, All activity, Export) and Anvil matches each charge to its recorded order (exactly by the order id in your Stripe metadata, or carefully by amount and date), then compares the fee Stripe actually took against the fee Anvil booked at sale time and shows any difference, charge by charge. Refunds on the statement are cross-checked against recorded refunds, and disputes are surfaced with their roughly $15 fee, which no per-sale fee model sees, offered as an expense along with any standalone Stripe fees. It's a report, not an import: your sales are never edited, the only thing it can record is those expenses, and re-uploading is always safe.
The tax pack answers "how much sales tax did I collect?"
On Etsy the answer doesn't matter much because Etsy collects and remits for you. On your own site, YOU owe the remittance, and until now Anvil couldn't say how much. The year-end tax pack gained a "Sales tax collected" section: your own sites' collected tax rolled up by ship-to state and quarter (the shape a state filing asks for), with Etsy's collected-and-remitted total shown as one separate line so you never remit those dollars twice. It counts orders that reported their tax, and where you actually owe depends on nexus rules, so it's the cross-check to bring your accountant, not the filing itself.
Your P&L now shows true profit, after fees and cost of goods
The Expenses page is a real profit and loss now, not just revenue minus overhead. It starts from what you actually brought in (paid invoices plus the price you logged on each sale), then subtracts the marketplace's cut, any shipping you absorbed, the cost of goods (materials and machine wear priced through the engine, never your own labor), and your overhead. What's left is real net profit, with a margin percent. Cost of goods and revenue both count the same set of sales (the ones with a price logged), so the two always line up. If you have sold sales with no price entered, the page now tells you how many aren't counted, so nothing goes missing quietly.
Recurring expenses got honest
A recurring bill counts every period it ran, not once. Start and end dates, per-year totals that match the P&L, and a monthly overhead run-rate so you know what staying open costs.
Machine embroidery
1July 9, 2026
Embroidery: amortize digitizing, and per-blank shipping weight
Two touch-ups for machine embroidery. Digitizing is a one-time cost to turn art into a stitch file, so the estimator now lets you enter what you paid once and how many pieces you'll make from that file. It carries only the per-item share into the price, no mental math. And each blank can now hold its own shipped weight (a cap and a hoodie are worlds apart), so the shipping estimate is accurate per product. Leave a blank's weight at 0 and it estimates by type as before. Neither change moves the item's price, only the shipping line.
Money
11July 2, 2026
Import an Etsy statement as expenses
Upload a monthly Etsy payment-account CSV and the overhead your P&L was missing lands in Expenses, categorized: Etsy Ads daily spend under Marketing, the Plus subscription under Software, listing fees and the per-order Offsite Ads fee under Fees. The importer knows which rows NOT to bring in: your per-sale transaction and processing fees are already counted on each recorded sale, so it leaves them out (and shows you exactly what it left out and why). Re-uploading a month is safe; anything already imported is skipped.
The year-end tax pack
Expenses now leads to a printable year-end tax pack: your whole year organized like Schedule C (Form 1040). Gross receipts and refunds as their own lines, cost of goods with your made-to-stock shelf as the ending inventory hint, every expense on its closest Schedule C line, and a 1099-K reconciliation number to check against the marketplace's form. Every line says where its number comes from, and the page prints clean. Below the printout sits the accountant bundle: four CSVs (the Schedule C worksheet, every sale with fees and refunds, the expense ledger, and the P&L summary) scoped to the year. A starting point for you or your preparer, not tax advice.
A sale's numbers are frozen the day it sells
Your assumptions (overhead, a labor rate, a material price) and your fee profiles are meant to price what you're making now and what you'll make next, not to silently rewrite history. So now, when you record a sale, Anvil snapshots its full economics that day: the cost it took to make (your real grams/hours, on the machine that ran it), the price it sold for, and the channel's fees. Change an assumption next month and your catalog prices and new sales update, but that sale's margin and take-home stay exactly what they were. Got orders from before this update? In Settings under Assumptions there's a 'Freeze past sales' button: click it once to lock all your existing orders at today's numbers before you change a rate. And each recorded sale has a 'Recost' button if you ever fix a genuinely wrong setting and want that one to catch up.
Tax time: a Schedule C worksheet from your real numbers
On Expenses there's a new 'Schedule C' download next to your P&L. It organizes the year you already tracked, gross receipts, cost of goods, fees, shipping, and your expenses, into the Schedule C (Form 1040) line structure, so you (or your accountant) aren't rebuilding it from marketplace CSVs every April. It even lines up your recorded marketplace sales against your 1099-K Box 1a. It's a starting point, not tax advice, with notes on the lines that need a human call. Business tier.
Download your P&L summary for tax season
Next to the expense export, the expenses page now has a P&L download: one CSV with your revenue, channel fees, shipping, cost of goods, and expenses for the year, ending in net profit and margin. Costs are written as negatives, so summing the amount column in any spreadsheet lands right on your net. The hand-it-to-your-accountant button.
Your P&L now counts what it cost to make the goods
Net profit on the expenses page finally subtracts your cost of goods: the materials, electricity, and machine wear that went into everything you sold this year, priced through the engine. It leaves out your own time (that's your profit, not a cost), so the number reads as real take-home, with your profit margin shown beside it. One note, so you don't double-count: log raw materials through your products, and keep expenses for overhead like rent, subscriptions, and tools.
Your P&L counts the shipping you eat
If you offer free shipping and pay the carrier yourself, that cost now comes off your net profit on the expenses page, shown as its own Shipping line beside channel fees. Record the shipping you paid on a sale and the P&L reflects it. Gross revenue is unchanged, so only your true take-home moves.
No more phantom sales
A finished job used to count as sold at list price until you said otherwise, which quietly inflated revenue (and fees, and absorbed shipping) for every card you hadn't answered yet. Now money only counts once you lock it in: a job finished since the Sold? capture shipped credits nothing until you record the sale or send it to stock. History from before the capture existed still works the old way, so nothing vanishes.
The cockpit shows the money
The home HUD gained a money pulse beside the production pulse: the money you recorded coming in each week (sale prices you logged plus paid invoices), across every craft and line. And the P&L got more honest: net profit now subtracts the channel fees on your recorded sales, shown as their own line, so profit reads as money actually kept.
Know what you owe the state
The sale capture now remembers the tax rate it strips, so the expenses page reports the sales tax you collected, by quarter, for remittance season. Paid invoices with a tax line count too, and tax on marketplace orders is shown apart: platforms like Etsy remit what they collect for you, so the quarters track only what you remit yourself. It sits beside the P&L (never inside it: collected tax is not income), and when you send the state its money, log the payment under Taxes & estimated payments to close the loop.
Sales tax, where it actually belongs
Engine prices stay pre-tax on purpose (marketplaces like Etsy collect and remit for you), but the documents you issue can now carry it: set a sales tax rate on a bid and the proposal itemizes it below the total, a won bid's invoice inherits it, and any invoice can set its own rate. Recording a sale from a tax-inclusive register total? Tell the capture the rate and it strips the tax before saving, so revenue and margin never count the state's money. The P&L also gained a Taxes expense category and an editable set-aside estimate, and the FAQ explains the whole stance.
Dashboards
9July 2, 2026
Dashboards open on this month
The seller and hobbyist dashboards now open scoped to the current month instead of all time, which is almost always the question you came to ask. All time is still one chip away, and every other period works like before. A brand-new workbench still opens on the getting-started view.
Refunds & remakes follow the time period
The seller dashboard's refunds and remakes tiles now respect the period filter, scoped the same way as the money tiles beside them: by the sale's date. Pick "This month" and you see refunds and remakes on sales dated this month, not your all-time count. The caption on the strip says exactly what scope you're looking at.
Deleting a product no longer hides its sales
Dashboard money used to need a sale's product row to price it, so deleting a product silently dropped its recorded sales from your revenue and take-home (History kept them, which made the dashboards look short). Now a sale settles from the numbers frozen when it was recorded, so the totals, the trend, the profit line on its History card, and the P&L cost of goods all survive the product's deletion. Only sales recorded before cost freezing existed (June 19) still need their product around.
The hobbyist dashboard got a lot more to look at
The hobbyist view now has the same time period filter as the seller (this month, last month, any range), a making pulse (hours at the bench per week with a by-month table of prints, hours, filament, and cash cost), a filament-by-type breakdown of what your printing actually burns (failed prints included), and the per-printer workhorse breakdown. All of it reads the volume lens: work counts in the month it was finished.
Which size earns its keep, and average shipping everywhere
The seller dashboard has a new by product and size table: for each collection, every sold size's average price, take-home, shipping, and margin, so a Small vs Large comparison is one glance. It follows the shop and period filters. The per-sale averages strip also gained its average shipping tile on every craft (it was 3D-only before).
See your seller dashboard by month, or any date range
The seller dashboard now has a time period filter next to the shop filter: this month, last month, 30 or 90 days, this year, or any custom range. Every number on the page scopes to it, and a new by-month table under the revenue pulse shows what each month made. Money counts by when a sale happened; volume (prints, hours, failures) counts by when the work was finished, so a May print sold in June lands in June's money and May's work. Works across all twelve crafts.
See your typical sale at a glance
Your Seller dashboard now shows your per-sale averages right under the headline: average sale price, average cost to make, and average take-home (plus average shipping on 3D). They're figured across your priced sales, so they line up with your totals. A quick read on what a normal order looks like for you.
The Hobbyist dashboard now shows what you've made, and what it cost
The Hobbyist view used to echo the Seller (it even led with an income number that belongs on the business side). It's its own lens now: a 'What you've made' headline (the sellable value of everything you've finished, sold or not, at your own list price) next to what it cost you to make in materials, power, and wear, plus the hours you put in. Per craft it shows cost to make and cost per piece, and keeps your output, time, material used, failure rate, and most-made list. The Seller view stays the money-and-margin lens, so the two answer different questions instead of repeating each other. Across all twelve crafts. Pro.
Findings and dashboard leaders show the full product name
An Insights card that read 'Top fails often', or a dashboard leaderboard showing a bare 'Top', didn't tell you which product when 'Top' is one part of a planter. Those now show the full name, like 'Sagres Planter · Large · Top', the same way the jobs board and history already do, so you can actually act on them. The 'Review in catalog' link still lands on the right product.
Pricing
8July 2, 2026
Anvil recommends your failure buffer from real data
Products with 5 or more logged jobs already price on their own learned failure rate. The failure buffer in your assumptions is what NEW products launch on, and now Anvil keeps it honest: the Assumptions form shows what your bench actually failed over the last 90 days, with a one-click button to use that number (you still hit Save, nothing changes silently). When the gap is big enough to matter, Insights surfaces a card too.
Refunds hand your fees back, the way Etsy actually does
We checked Anvil's fee math against a real month of an Etsy payment statement, line by line. The good news: transaction and processing fees (including the once-per-order 25 cents on multi-item orders and the fee on collected tax) match Etsy's own books almost to the cent. The correction: Etsy credits ALL your fees back on a full refund, including payment processing, so the refund math now hands fees back instead of counting a kept slice. A goods-lost refund still counts what a refund cannot undo: the cost of making the item and the shipping label you already paid for.
See the filament pool your 3D listing price rides on
A 3D listing is priced before you know which color will print, so it uses the average cost across every active spool of that material type. That average is now visible: the breakdown on the catalog and the estimator shows the pool right under the Material line (how many spools, the average per kg, and the cheapest to priciest range). And when you have recent printing history, the average is now weighted by what you actually print, so one pricey spool you never use stops moving every listing. No history means nothing changes.
Refunds keep the payment processing fee, like the marketplace does
When Etsy refunds an order it credits the transaction fee back but keeps its payment processing fee (the 3% and the $0.25). Anvil's refund math used to hand all of it back. New sales freeze the processing slice at record time, so a refund now shows the fee the marketplace actually kept, in your take-home and your profit and loss alike. A full refund with the goods lost counts it as part of the loss, and the carrier cost you already paid now counts there too. Sales recorded before this keep the math they were recorded with.
Etsy fees now count the shipping and tax fee bases
Etsy charges its payment processing fee on the sales tax it collects (and both its transaction and processing fees on buyer-paid shipping), not just on your item price. Anvil now captures each order's buyer-paid shipping and collected tax and counts those fee dollars in your take-home and profit and loss, frozen at the sale like the rest of its economics. Older orders keep the item-only math they were recorded with.
Fees on multi-item orders are counted more precisely
A marketplace order with several items was charging the per-order payment processing flat fee (like Etsy's $0.25) once per item instead of once per order, quietly understating your take-home on every multi-item order. It now counts once per order, on your dashboards and your profit and loss alike. Per-item listing fees still count per item, as they should. Recurring expenses also stopped counting a bill before its day of the month arrives, so mid-month profit reads true.
See your take-home on every estimate
Every craft's estimator now shows your take-home and margin right under the cost build-up, in green when you're making money and red if a price would sell at a loss. The number was always in the math; now it's front and center on the estimate, so you can see what you actually keep before you settle on a price.
Your prices learn how long things actually take you
Anvil already learns your real failure rate from logged jobs. Now it does the same for labor. Finished jobs have a 'hands-on minutes' field, and once a product has five real times logged, Anvil prices it at the median of those instead of your original estimate (median, so one marathon custom order doesn't skew it). Your saved estimate stays put; only the price uses the learned number. It matters most on the hands-on crafts (resin, woodworking, jewelry, and the rest) where labor is most of the cost.
Insights
2July 2, 2026
Insights flags a spool priced far off its pool
If one spool costs way more (or less) than the rest of its material type, every listing of that type quietly misprices: a $35 silk PLA averaged with your $15 basics underprices the silk work and overprices the rest. Insights now flags any spool more than 40% off its pool average, tells you the exact price variation to add (computed through your own margin on a real listing), or you can rename it to its own type so it prices alone.
Insights now flags materials running low
Your Insights page groups its findings into what's costing you money versus what's just worth a look, and adds a Running low section: the materials your recent usage says to reorder soon, before a job stalls waiting on an empty spool. It's the same forecast as your inventory page, surfaced next to the money findings.
Jobs
15July 1, 2026
Deleting or failing a finished job cleans up all of it
Deleting a job used to return its raw material but could leave traces behind: a made-to-stock item stayed counted on your shelf, and its recorded sale could linger in totals. Both now reverse with the job. Marking a done job as failed also backs out the sale its completion recorded, and a made-to-order line goes back in line to record again when the reprint finishes. No phantom numbers left floating around.
The jobs page leads with the live board
The top of the jobs page was carrying a lot before you reached your actual queue. Now it leads straight with the work: what needs attention, what's printing (with its live progress, no longer shown in two places), what's in progress, then the queue. The filament check moved onto the queue itself as a one-line "queue needs N colors" you can expand, and the occasional tools (log a past job, filament history) tuck below the board. Less scrolling to get to what you came for.
A cleaner, easier-to-scan jobs board
The jobs board got a tidy-up. Each part of a project now reads as one calm line (its status, color, printer, and the button to act) instead of a tall stack, and the actuals for the part you're actively printing open up right where you need them. The printer and color are still yours to change, just from the cleaner spot. A run you're not working collapses to a single line with its colors and order number, and a small set of bars shows how far along it is at a glance. There's also a gentle "printer busy" heads-up on a queued part whose printer is already mid-print, so you don't start two jobs on one machine by accident.
Multi-part website orders queue each plate in its own color
When a make-to-order website order picks a color per part (a black head, a blue body), Anvil now queues each plate in its own matching spool, picked by the exact color your site sends, so the run is ready to start in the right colors. It also reads which body or option the buyer chose and queues that exact plate. Anything it can't match cleanly falls back to your default so nothing is blocked.
Make-to-order orders queue in the right color
When a make-to-order website order includes a color, Anvil now queues the print in the matching filament spool automatically, so the job is ready to start instead of waiting for you to pick the color by hand. If the color doesn't clearly match one of your spools, it queues your default so nothing is blocked. It's the same color matching your Etsy orders already use.
Website orders land on your jobs board
Make-to-order website orders now flow straight onto your jobs board, the way Etsy orders do. When a paid order comes in for a make-to-order shop, Anvil queues the work to make (run-aware, so a multi-part product queues all its parts), labeled with the order. Finish the job and the sale records itself from the order's price and channel. A multi-item order waits until every piece is made, then records as one bundle so shipping counts once. From-stock shops still ship off the shelf instead. The order goes in, the work shows up, the sale records on finish. No re-keying.
The Jobs board is just your production line now
The Jobs board used to repeat a slice of your finished work at the bottom, which doubled up with the Completed page. We've removed that peek, so the board stays focused on what needs you: the queue, what's printing, and what's awaiting a sale. Everything finished still lives on Completed, fully editable there (correct it, backdate it, log or edit a sale), reachable from the board whenever you need it.
One print queue you can actually reorder
The print queue used to stack project runs above single prints as two separate lists, so a new order seemed to pop in wherever and you could only drag within each group. Now it's one unified queue: singles and projects sit together in the order they came in (newest at the bottom), and you can drag any card, a whole project moving as one block, to wherever you want it.
Reprinted at a different size? Just rescale the record
Printed a model a little bigger or smaller than the saved version? On a finished 3D print's 'Edit record', a new 'Rescaled to %' box fills in the actual grams and hours for you, scaled by volume (a 110% print uses about a third more material, not 10% more). No need to delete the job and start over. Both numbers stay editable, so you can fine-tune to your slicer's exact figures.
Spot orders aging in your queue
An order that's been waiting to start for a few days now flags itself: a 'Waiting Nd' tag turns amber at three days and red at a week, right on the card. So a made-to-order job catches your eye before it drifts past its ship-by. It only shows on orders still waiting, not ones already printing or done.
Assign the printer that actually ran each plate
Printing a planter's Top on one machine and its Bottom on another, because each color is already loaded? You can now pick the printer for each plate right on the jobs board, the same way you pick the color. Your seller dashboard then costs each plate's electricity and machine wear on the machine that really ran it, so your take-home stays honest even when a job hops printers. Your listed price doesn't move. Shows up once you have two or more printers saved.
See when each order landed in your queue
Every job on the board now shows when it was added, with the date and time, right on the card. The quick 'queued 2h ago' is still there for a glance, but now you can also read the exact day an order came in without counting back. It shows on jobs waiting in the queue, jobs that are printing, and whole projects, in your own time zone.
See what's printing right now
The jobs board now leads with a Printing now tile: every active print with a live progress bar and a rough time left, so you can see what's on the bed and when it should finish at a glance. It's an estimate off your expected time, not a sensor reading, so tune your expected times for a closer count.
Let your printer close out the job
When a print finishes on the bed, Anvil can mark the job done for you. A small helper that runs on your own network watches your printer (Bambu, or any Klipper printer with Moonraker) and tells Anvil the moment a print completes, so the job finishes, your filament stock decrements, and any made-to-order Etsy sale records itself, with no clicks from you. Generate a token and grab the setup steps under Settings, Printer sync.
The jobs page learned your lifecycle
Jobs now read top to bottom the way work actually flows: needs attention, print queue, printing, awaiting sale, finished. Drag to reorder the queue (whole project runs too), tag jobs with an order name, watch a live progress bar while printing, and log a failed print at the layer it died for an honest waste estimate.
Catalog
1June 30, 2026
Large catalogs open much faster
If you have a big catalog, opening it used to build every product card up front, even the ones inside collapsed collections. Now a collection's cards load only when you open it, so the page comes up with your collection headers right away and fills each one in on demand. Search still works across everything. For a catalog with a few hundred listings, the first load is dramatically quicker.
Site
4June 29, 2026
A features page that shows the whole workbench
Anvil has grown well past a price calculator, so there's now a Features page that lays out everything in one place: the free pricing engine, your catalog and per-shop pricing, jobs and the learned failure rate, dashboards and Insights, orders with marketplace sync, inventory with low-stock forecasting, and the run-a-business tools (invoices, clients, expenses and profit and loss). Each piece is tagged with what it needs (free, Maker Pro, or Shop and Business), so you can see exactly where everything lives before you sign up.
See how a price is built, right on the home page
The home page got a refresh that shows the work, not just talks about it. Up top, a live sample breakdown lays out exactly how a price is built (material, machine and labor, overhead, channel fees, your take-home, and the suggested price); tap or hover any line to see what feeds it. The main button now drops you straight into a no-sign-up demo so you can try the engine on your own craft first. We also tidied the layout and made the wording honest: Anvil runs three purpose-built engines (one for makers, one for trade and service bids, one for digital), all in one forge.
Eight free calculators
A new public calculators hub: marketplace fees (what Etsy, Amazon, eBay, and the processors really take), wholesale and keystone pricing, the hourly rate you must charge, bulk price breaks, plus paint, flooring, concrete, and roofing take-off calculators. Free, no account needed, and each hands off into the full engine when you want the whole picture.
Try it without an account
Live demo estimators at /try for every maker craft and digital products: the real pricing engine on researched presets, no sign-in, nothing stored. Plus a general FAQ, this very changelog, and two new pricing guides (handmade candles, and crochet priced so the hours get paid).
Onboarding
2June 29, 2026
A first run that fits your line of work
Setting up in a trade, service, or digital line now gives you a short, line-specific heads-up on how your pricing works (a bid built bottom-up, or design time amortized over a run) instead of maker-flavored steps about machines and materials. Every kind of seller gets a first run that matches what they actually do.
Moving in from another shop is part of setup now
Joining Anvil when you already sell somewhere just got smooth. Setup has a new step: tell us if you already sell on Etsy, Shopify, Square, WooCommerce, or from a spreadsheet, and we walk you straight into bringing your products and order history in, in a sensible order, instead of starting from a blank catalog. Pick how you ship and we set up a matching shipping estimate so your prices include postage from the start. The shops and fees we set up match where you actually sell. Your home page then keeps a short 'bring your shop in' checklist (catalog in, past sales in, a shop connected) until you're fully moved over. Just starting fresh? The from-scratch path is untouched.
Account
6June 26, 2026
A failed payment is impossible to miss
The heads-up about a failed subscription payment now rides at the top of every page, not just billing, so a paused account sees it right away with a one-click path to update the card. Active subscriptions are never affected, and founders keep their lifetime access.
The free catalog limit now holds on downgrade
The free plan covers 10 products. Until now that only blocked adding an 11th, so a catalog built on a paid plan stayed fully usable after reverting to free. Now a free account over the limit keeps its newest 10 active and pauses the rest (not editable, queueable, or sellable) behind an upgrade, with a clear list of what's paused. Nothing is deleted, search can't pull a paused product to the top, and upgrading restores everything instantly.
A failed payment pauses paid features, and shows you how to fix it
If a subscription payment doesn't go through (a card expires, a charge fails), your paid features now pause cleanly until it's sorted out, instead of staying on. Your billing page shows a clear note with a one-click way to update your card and turn everything back on. Nothing is lost, and an active subscription is never affected. Founders keep their lifetime access regardless.
Download a complete backup of your account
The account export under Settings now includes everything you keep in Anvil, not just your 3D data: every craft's cost library, your whole catalog and jobs, and your sales, expenses, clients, bids, invoices, and inventory, all in one JSON file. Your saved credentials (the shop and printer connection tokens) are deliberately left out. It's your data, portable and yours to keep.
Sign in with a 6-digit code
Email sign-in now sends a short code you type into the same window. No more magic link opening in the wrong browser on your phone. The magic link stays as a fallback.
Achievements got a memory
Badges now record the date you earned them, stay earned even if a count later dips, and celebrate on whichever device you open next.
Inventory
1June 25, 2026
See what you've made for stock, valued at cost
Your inventory page has a new Made-to-stock shelf. When you finish a job and mark it as stock (not sold), the unit lands on the shelf carrying its cash cost of goods, so you can see at a glance what you've built ahead and what it's worth at cost. The cost rides with the unit and stays out of your profit until it actually sells, then it books as that sale's cost. So a big batch-build month no longer reads as a loss, and selling from stock later counts the right cost just once. It's also the groundwork for letting orders ship from stock without re-charging you for materials you already used.
Services
3June 24, 2026
Six creative services join Anvil, with Quick start
Anvil now prices six more service lines: graphic & brand design, photography, SEO & digital marketing, copywriting & content, social media management, and videography & video editing. Each bids a job the same honest way (line items, your project costs, a buffer, then your overhead and profit), each has its own Quick start packages (a logo + brand basics, a wedding day, a monthly SEO retainer, a launch email sequence, a reels package, and more), and each has a rate-tier picker (solo, studio, agency) instead of the trades' region question. Starter rates are 2026 mid-ranges, researched and cited on the Sources page. Ad spend, tools, and licensing are tracked as pass-through costs, not marked up as your work.
Quick start comes to services, with a rate tier
Web design (and the new service lines) get the Quick start gallery too. Because region and union don't fit a desk service, the wizard asks your rate tier instead (solo freelancer, small studio, or agency), which nudges the labor rates. Care-plan templates can also set a monthly retainer alongside the one-time quote.
Services join the bench
A fourth product line: services. Web design and development quotes a project by section on the same engine the trades bid with, including an optional monthly care-plan retainer quoted alongside the one-time build.
Polish
3June 11, 2026
A site-wide consistency pass
A sweep across every page for stale copy and counts. The about page now knows all twelve crafts and eighteen trades exist, the contribute page stopped claiming shipped crafts were on the roadmap, and a pile of small voice fixes landed across forms and toasts.
A faster way around
The craft switcher became a single searchable menu (Ctrl or Cmd-K) with per-browser recents. The home HUD gained an in-queue stat, printing cards can be canceled without polluting the learned failure rate, and the failed-print form auto-fills the layer count from the slice.
The catalog got fast
Product search is instant and client-side, and the edit forms behind each card load only when opened. Big catalogs stopped freezing on load.
Digital
2June 11, 2026
Bundle pricing for digital sellers
The digital workbench gained its first tool: a bundle and license calculator. Set your single-file price, pick the shop you sell through, and tune the tier ladder (3-pack, 5-pack, 20-pack). Each tier shows the discount buyers see and what you actually keep after fees, plus a commercial-license price at a multiple of personal.
Digital products and print-on-demand
A third product line. A digital file has no per-unit material, so the engine amortizes design time over expected sales and leads with break-even units and projected profit. POD mode adds the partner's per-unit base.
Documents
1June 11, 2026
PDFs that name themselves
Saving a quote, proposal, invoice, or price list as a PDF now suggests the right filename (the quote or invoice number and the client, not a generic page title). Long documents paginate cleanly too: table headers repeat on every page and rows no longer split across the fold.
New craft
1June 1, 2026
Woodworking completes the dozen
Board-feet lumber math, machine run-time metered separately from shop hours, hardware and finish as real lines. With jewelry alongside it, all twelve maker crafts are live on the one engine, and the two weeks before this brought the eighteen trades, inventory, invoicing, clients, and expenses they share.
Want the longer story?
Everything above runs on one auditable cost engine. The blog walks through the pricing method craft by craft, and the engine itself is free to use.