JSON list formatting: what it does, and where it stops
Last updated:
Before paying for anything, try this. JSON column and view formatting is built into SharePoint, costs nothing, needs no App Catalog, no deployment and no approval from IT — a site owner can apply it in minutes and undo it just as fast.
It handles more than most people attempt: conditional colours and icons, progress bars, data bars, person cards, clickable buttons that open a form or launch a flow, card layouts in gallery view, and row styling driven by any column's value.
It also has five hard walls, and they are worth knowing before you start rather than after: it cannot join data across lists, cannot aggregate, cannot hold its own state, cannot call an external API, and cannot escape the shape of one list view. Every one of those is where a paid route starts to be justified.
What it genuinely handles
| Requirement | Achievable with formatting? |
|---|---|
| Colour a status column red / amber / green | Yes, easily |
| Show an icon next to a value | Yes |
| A progress bar from a percentage column | Yes |
| Highlight the whole row when a date is overdue | Yes, with view formatting |
| A button that opens the item's form or a URL | Yes |
| A button that starts a Power Automate flow | Yes |
| Card layout instead of rows | Yes, in gallery view |
| Hide a column from some users | No — that is permissions, not formatting |
If your requirement is in that table, stop reading and go and do it. The most common expensive mistake in this area is commissioning a component to do something a formatted view already does.
The five walls
1. It cannot join lists
Formatting sees one list. If your tool needs projects from one list and their tasks from another in a single view, formatting is out. Lookup columns show a value, not a joined dataset.
2. It cannot aggregate
There is no sum, count or average across items available to the formatter. View totals exist at the bottom of a column but you cannot design around them, and a KPI tile showing “14 open, 3 overdue” is not expressible.
3. It has no state
Nothing persists between renders. A filter the user sets, a tab they chose, a panel they opened — none of it survives, because the formatter is a declarative description of how to draw a row, not an application.
4. It cannot call anything external
No API calls, no fetching. It can link out and it can trigger a flow, but it cannot bring an answer back and show it.
5. It is trapped inside a list view
The output is always a list view on a list page or a list web part. You cannot compose a dashboard from several sources, and you cannot place it as a self-contained component with its own layout on a page.
What to do at each wall
| Wall you hit | Cheapest next step |
|---|---|
| Need data from two lists together | A component that reads both, or restructure into one list if the relationship is simple |
| Need counts, sums or KPI tiles | A KPI component reading the same list |
| Need real interactivity and state | A web part — this is the honest boundary of no-code formatting |
| Need an external system | Power Apps with a connector, or bespoke development |
| Need a dashboard, not a list | A no-code component platform, or bespoke SPFx if the requirement is unusual |
The useful discipline is to hit the wall first. Arriving at a paid route with a specific sentence — “formatting cannot aggregate and we need counts by status” — makes the comparison concrete, the quote smaller and the security review shorter. Arriving with “we want a dashboard” is how projects become open-ended.
Frequently asked questions
Does JSON formatting need IT approval?
No, and that is its biggest practical advantage. It is a property of a column or a view, applied by anyone who can edit the list. There is no package, no App Catalog, no API permission and nothing for a security review to look at. If you need something working this week and cannot wait for a deployment, this is the route.
Is it hard to write?
The syntax is fiddly but you rarely start from scratch. SharePoint offers design modes for common cases, and Microsoft publishes a large sample gallery you can paste and adapt. Expect an hour of frustration the first time and minutes thereafter.
Will formatting break when Microsoft updates SharePoint?
Very unlikely. It is a supported, declarative, first-party feature, which is a meaningful difference from custom code: there is no framework version to chase and no build to maintain. This durability is a real part of its value, not a footnote.
Can it replace a web part entirely?
For anything that is fundamentally a list with better presentation, often yes. For anything that aggregates, combines sources, keeps state or needs its own layout on a page, no — and no amount of effort changes that, because the limits are architectural rather than a matter of skill.