SharePoint column formatting

SharePoint progress bar column formatting

Turn a plain number into a color-coded percentage bar, so people can see how far along something is without reading the raw value.

A SharePoint or Microsoft Lists Number column normally shows a bare number: 68. With a small piece of column formatting JSON, you can render it as a filled bar instead — useful for percent-complete tracking, budget usage, capacity, or any metric with a clear min and max.

Before and after

ProjectProgress
Q1 launch plan
Onboarding flow
Brand refresh
Bar fill and color scale with the number field's value
Build this progress bar → Opens the generator on the Progress Bar template. Enter your field name, copy the JSON, done.

What the SharePoint progress bar JSON looks like

The generator produces JSON like the example below. An outer div acts as the track, and an inner div's width is calculated from the field's value as a percentage of your chosen max:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "style": { "background-color": "#edebe9", "border-radius": "6px", "overflow": "hidden", "width": "140px" },
  "children": [
    {
      "elmType": "div",
      "style": {
        "width": "=(([$Progress] > 100 ? 100 : [$Progress]) + '%')",
        "background-color": "=if([$Progress] >= 70, '#107c10', if([$Progress] >= 40, '#d29200', '#d13438'))",
        "height": "16px"
      }
    }
  ]
}

This is standard SharePoint progress bar JSON: a track div containing a fill div whose width is an expression, not a fixed value. The generator computes that expression and the color thresholds for you.

How to apply it

  1. Open the generator and pick the Progress Bar template (or use the button above).
  2. Enter your column's internal field name — see the note below.
  3. Set the min/max range and threshold colors to match your data.
  4. Click Copy.
  5. In SharePoint: Column settings → Format this column → Advanced mode.
  6. Delete what's in the box, paste, click Preview, then Save.
Most common reason it doesn't work: the field name must match your column's internal name, which can differ from the display name. See the internal field name guide to find yours.

Common questions

What column type do I need for a progress bar?
A Number column. You set a min and max in the generator, so it doesn't need to be 0–100 — it works for any numeric range, like hours logged against a budget.
Can the bar show the percentage as text too?
Yes — the template includes an inline label showing the value or percentage alongside the bar, so people don't have to guess from the fill alone.
Can the color change based on how full the bar is?
Yes — you can set threshold colors so the bar shifts from red to yellow to green as the value increases, the same way the traffic-light and days-remaining templates work.