Nex Validator enforces a limit in two places, and they are separate systems with separate switches. Almost every “why isn’t this working?” traces back to expecting one to imply the other.
Storefront · Product & cart pages
Locks the quantity picker so an invalid number cannot be chosen
Needs
- Theme app embed ON
- Product metafield set
- “Allow bulk limit” ON
Extra setup required
Checkout · Shopify checkout
Blocks payment and shows your message
Needs
- A rule with status Enabled
Works immediately
The layers are independent. A limit can block at checkout while the product page still lets customers pick any quantity — which is the default.
Checkout — the layer that always works
Enable a rule and checkout enforcement is live. If the cart breaks the limit, payment is blocked and your message is shown.
This runs as a Shopify Function inside checkout, so it cannot be skipped by going direct to checkout, and it covers Shop Pay, express checkout buttons and direct checkout links.
This is the layer that actually protects you. Everything else is convenience.
Storefront — the layer you have to turn on
The theme extension can set min, max and step on the quantity input, so an invalid number cannot be picked. Three things must all be true:
- The theme app embed is enabled — see install
- The product carries the rule metafield
- Allow bulk limit is on in a rule
What this means in practice
| You configured | Storefront picker | Checkout |
|---|---|---|
| Product Min Quantity rule only | Unchanged | Blocked |
| Metafield only, “Allow bulk limit” off | Unchanged | Depends on your rules |
| Metafield + embed + “Allow bulk limit” on | Locked | Blocked |
The first row is the common surprise. A merchant sets a minimum of 6, sees the product page still allows 1, and concludes the rule is broken. It is not — it is enforcing at checkout exactly as configured.
Which layers you actually want
Checkout blocking alone is correct and safe. Adding the storefront lock is a conversion decision, not a safety one: it stops a customer building a cart they cannot buy, which is a better experience than a rejection at the payment step.
Never rely on the storefront layer alone. It runs in the browser and can be bypassed; the checkout layer cannot.