← All posts Shopify Range Setting: Fix "Range Parameters Must Have at Most 101 Steps"

Shopify Range Setting: Fix "Range Parameters Must Have at Most 101 Steps"

The Shopify range setting enforces a hard cap of 101 steps. Learn exactly why it triggers, how to calculate your way out of it, and when to use number

The error "Range settings must have at most 101 steps" means your min, max, and step combination produces more than 101 possible slider positions. Fix it by widening step, narrowing the max, or switching to the number input type when you genuinely need a large numeric range. The root cause is always arithmetic, not a bug.

Key takeaways

  • Shopify caps range settings at 101 steps maximum (enforced at schema parse time).
  • The step count is calculated as (max - min) / step; that result must be 100 or fewer.
  • The error appears in the Shopify theme editor and blocks the section from rendering.
  • Changing step: 1 to a higher integer is usually the fastest fix.
  • When you need an uncapped integer input, replace range with number.

What is the 101-step rule?

Shopify's range input type renders a slider in the theme editor. The platform enforces a hard cap: the slider can have at most 101 positions (steps 0 through 100, inclusive). Shopify calculates the number of steps internally as:

steps = (max - min) / step

If that calculation produces a value greater than 100, Shopify rejects the schema and throws:

Error: Invalid schema: setting with id="[your_id]" step invalid.
Range settings must have at most 101 steps.

This validation runs every time the theme editor loads the section, so the section becomes completely non-functional until the schema is corrected.

Note: As Shopify confirmed in their input settings documentation, all four range attributes (min, max, step, default) must be numeric values, not strings. Passing a string for any of them also throws an error.

The three most common triggers

These are the patterns I see most often when merchants or junior developers hit this wall:

  1. Large range with step: 1, Setting min: 0, max: 500, step: 1 creates 500 steps. This is the most frequent case.
  2. Bumping an existing max without adjusting step, A developer changes max from 100 to 300 on a logo width slider, forgetting the step stays at 1.
  3. Copying a range from an HTML spec example, Standard HTML allows any step count; Shopify does not.

Real community examples include a free_shipping_threshold slider set to min: 0, max: 500, step: 1 and a logo_max_width slider pushed from 300px to 550px without recalculating the step.

How to calculate whether your range is valid

Before writing a single line of schema, run this check:

(max - min) / step <= 100   →  valid
(max - min) / step > 100    →  will throw the 101-step error

Quick examples

minmaxstepSteps calculatedValid?
01001100Yes
05001500No
05005100Yes
0100010100Yes
102102100Yes
03001300No
03003100Yes

The boundary is exactly 100 calculated steps (which gives 101 slider positions including the start point). Any value above 100 is rejected.

Three ways to fix it

1. Increase the step value

This is the correct fix in most cases. A padding slider that goes from 0 to 200px in steps of 2 gives merchants 101 positions and stays within the limit.

{
  "type": "range",
  "id": "section_padding",
  "label": "Section padding",
  "min": 0,
  "max": 200,
  "step": 2,
  "unit": "px",
  "default": 40
}

When to use: Almost always. Most design values (padding, font sizes, opacity percentages) do not need single-unit precision across a wide range.

2. Narrow the max value

If single-step precision matters (for example, a 1-to-5 star rating or a 0-to-100 percentage), simply reduce max to stay within 100 steps at step: 1.

{
  "type": "range",
  "id": "free_shipping_threshold",
  "label": "Free shipping threshold",
  "min": 0,
  "max": 100,
  "step": 1,
  "unit": "$",
  "default": 50
}

This community-verified fix was the accepted solution for the free_shipping_threshold case that spread across the Shopify forums.

3. Switch to the number type

When you genuinely need a merchant to input any integer (an animation delay in milliseconds, a product count above 100, a threshold that could be 0-9999), the range type is the wrong tool entirely. Use number instead.

{
  "type": "number",
  "id": "free_shipping_threshold",
  "label": "Free shipping threshold ($)",
  "default": 50
}

The number type accepts any integer, has no slider cap, and is accessed identically in Liquid via section.settings.free_shipping_threshold. The tradeoff is a text input instead of a slider, so merchants can enter out-of-range values. If guardrails matter, add a Liquid check in your section code.

Choosing the right fix: a decision table

SituationRecommended fixWhy
Padding / spacing slider, wide rangeIncrease step to 2, 4, or 5Precision rarely needed at single pixel
Percentage or 0-100 valueKeep step: 1, set max: 100100 steps fits exactly
Currency threshold (small amounts)Set max to your realistic ceilingAvoids impractical high values
Large integer, no upper boundSwitch to number typeRemoves the cap entirely
Opacity or scale (0.0 to 1.0)min: 0, max: 100, step: 1, divide by 100 in LiquidShopify range only supports integers

One thing many tutorials skip: range only supports integers

Shopify's range input does not support decimal step values. If you need a 0.1 step for opacity, the workaround is to store the value as an integer (0 to 100) and divide by 100 in your Liquid output:

{% assign opacity = section.settings.overlay_opacity | divided_by: 100.0 %}
<div style="opacity: {{ opacity }}">

This pattern is cleaner than it looks: the merchant sees a 0-100 slider, your CSS gets a 0.0-1.0 float. No hacks needed.

Verifying your fix before publishing

Theme Check, Shopify's official linting CLI, catches this error during local development. Run it before pushing any schema changes:

shopify theme check

If you are working directly in the Shopify admin code editor (without a local CLI setup), save the section file and reload the theme editor preview. The error appears as a red banner at the top of the customizer if the schema is still invalid.

For a deeper look at how Theme Check handles schema validation and argument errors, see Shopify Theme Check: Why a Single File Path Argument Does Not Work.

Practical checklist before adding any range setting

Use this list every time you write a new range block:

  • Calculate (max - min) / step and confirm the result is 100 or below.
  • Confirm all four attributes (min, max, step, default) are integers, not strings.
  • Confirm default falls between min and max.
  • Ask: does this value genuinely benefit from a slider? If not, use number, select, or text.
  • Test in the theme editor before pushing to production.

For a full breakdown of every schema input type and when to reach for each one, see the Shopify theme development guide.

Summary

The "range parameters must have at most 101 steps" error is pure arithmetic. The formula (max - min) / step must produce 100 or fewer. Widen your step, cap your max, or swap to the number type. None of these fixes require a Shopify plan upgrade, a theme reinstall, or support ticket. Understand the constraint once and you will never hit it again.

shopify theme developmentshopify liquidshopify schematheme customizationshopify debugging

Frequently asked questions

What does 'range settings must have at most 101 steps' mean in Shopify?

It means your range setting's min, max, and step values produce more than 100 calculated steps. Shopify calculates steps as (max - min) / step, and that result must be 100 or less. Fix it by increasing the step value, reducing the max, or switching to the number input type.

Can I use decimal step values in a Shopify range setting?

No. Shopify range settings only support integer values for min, max, step, and default. To work with decimals (such as opacity from 0.0 to 1.0), store the value as 0 to 100 with step 1 and divide by 100.0 in your Liquid code.

What is the difference between the range and number input types in Shopify schema?

The range type renders a slider with a defined min, max, and step, and is capped at 101 positions. The number type renders a plain text field that accepts any integer with no upper or lower limit enforced at the UI level. Use range for constrained values with visual slider feedback, and number for open-ended integers.