In short: The Magento 2 Design Configuration grid shows no rows when its design_config_grid_flat table is empty. Rebuild it with indexer:reindex; if Magento reports the index as locked, check that no reindex is running, then run indexer:reset and retry.
You open Content > Design > Configuration in the Magento 2 admin and the grid is empty. There is no global row, no website and no store view, even though your theme files are in place and the storefront works. This guide explains why that happens and how to fill the grid again with two console commands.
What is the Design Configuration grid?
The grid is the first page of Content > Design > Configuration.[1] It lists the global scope, each website and each store view, with the theme applied to each; you pick a row and click Edit to change its design settings.[1]
It is not the same page as Content > Design > Themes, which lists the installed themes and has its own data source. An earlier version of this guide gave the wrong menu path for the grid, which is corrected here.
A blank grid is also different from a grid that has rows but no theme in them. In a test, scopes without an assigned theme were still listed, and Adobe notes that the system default theme is used when none is set.[1] This guide is only about the case where no rows appear at all.
Why is the Design Configuration grid blank?
The grid does not read the live configuration. It reads a separate table, design_config_grid_flat, which the design_config_grid indexer fills.[5] If that table has no rows, the grid has no scopes to display. A stuck Processing status is a separate problem: in the test the grid's data source still returned its three existing rows, but the command line reindex refused to start.
After a move or restore, this fix applies if the restored database has no rows in design_config_grid_flat; the fact that the store was moved does not by itself establish the cause. A reindex that was interrupted can also leave the index unable to run again.[3] Adobe's own knowledge base lists the usual reasons a reindex does not finish: another process or user interrupting it, a memory limit, a MySQL error such as a timeout, or a fatal PHP error.[3]
What a test showed. In a Magento Open Source 2.4.9 test with PHP 8.4 and MariaDB 11.4 (the versions used, not a statement of what Adobe supports), results came from the grid's data source rather than a browser admin page. The starting state had three scope rows; emptying design_config_grid_flat gave these results:
| State | Grid rows returned | indexer:status for the index |
|---|---|---|
| Working store | 3 | Ready |
| Table emptied | 0 | Ready |
After cache:flush |
0 | Ready |
After indexer: |
3 | Ready |
Two things to take from this. The status can say Ready while the grid is empty, so a green status does not prove the grid has rows. And clearing the cache does nothing for this problem.

How do you fix a blank Design Configuration grid?
Before you run anything: these commands rebuild index data for your store. Try them on a local copy or a staging site first, take a database backup, and run them at your own risk. iLogr cannot see your store and accepts no responsibility for damage, data loss or downtime.
Work from the Magento root directory, as the user that owns the files. If your server has several PHP versions, call the command line PHP of the one your store runs on (for example /), which must be a version your Magento release supports.[4]
First look at the index state:
bin/magento indexer:status design_config_grid
Then rebuild it:
bin/magento indexer:reindex design_config_grid
A successful run prints Design Config Grid index has been rebuilt successfully, and the grid lists your scopes again.[2]
What if the index is locked?
An interrupted run can leave the index marked Processing, which makes the command line reindex refuse to start. In a test with the status set to Processing, the command printed the message below and exited with code 1, whether or not the grid table had rows:
Design Config Grid index is locked by another reindex process. Skipping.
Adobe's fix for this message is to reset the index status and run the reindex again.[3] Make sure no reindex is genuinely still running first, because the reset marks the index invalid whatever is happening to it.
bin/magento indexer:reset design_config_grid
bin/magento indexer:reindex design_config_grid
A small correction to the usual explanation: indexer:reset does not rebuild anything and does not "remove locks" as such. It invalidates the index status.[2] In the test, the status changed from Processing to Reindex required, and only then did the reindex run and refill the grid.
Will it come back?
Working cron can rebuild this index when it is marked Reindex required. It does not by itself repair an empty table that is still marked Ready, or a stale Processing status. Three behaviours in the Magento source explain how the grid is refreshed.
- Creating a store view or website, or deleting a website, store group or store view, marks the index as invalid. In the test, a new store view did not appear in the grid, and the status read Reindex required, until the next reindex; after it the grid listed four scopes.[5]
- Magento rebuilds invalid indexes through cron. The job
indexer_runs every minute in thereindex_ all_ invalid indexgroup.[6] Without working cron, an invalid grid index can stay stale until a manual reindex or a successful design configuration save rebuilds it. - Saving design configuration in the admin reindexes the whole grid, so the grid corrects itself whenever you save a scope.[5]
Switching between Update on Save and Update by Schedule is not a fix for a blank grid. In Magento 2.4.9 the index uses a placeholder view with no table subscriptions; store changes invalidate the index and design configuration saves request a full reindex independently of that setting.[5] In the test, switching from Schedule back to Save changed the status from Ready to Reindex required. Leave the existing mode unchanged for this repair.[2]
References
Numbers in square brackets in the text link to these sources.
- Adobe Experience League: Design configuration (opens in a new tab)Used for: The admin path, what the grid lists and the default theme note.
- Adobe Experience League: Manage the indexers (opens in a new tab)Used for: What indexer:status, indexer:reindex and indexer:reset do, and the index modes.
- Adobe Experience League: Index is locked by another process (opens in a new tab)Used for: The locked-index message, its causes and the reset-then-reindex fix.
- Adobe Experience League: System requirements (opens in a new tab)Used for: Choosing a PHP version that your Magento release supports.
- Magento 2.4.9 source, Theme module: indexer.xml (opens in a new tab), mview.xml (opens in a new tab), DesignConfigRepository.
php (opens in a new tab) , Plugin/Store.php (opens in a new tab).Used for: The grid table, the placeholder view, the reindex on save and the invalidation. - Magento 2.4.9 source: Indexer module crontab.xml (opens in a new tab)Used for: The cron job that rebuilds invalid indexes every minute.
2 Responses
Nice post Prashant, thank for sharing it…