The check catalogue
Twenty-seven checks in six areas. Every one can be switched off from Microscope → Checks when it doesn’t apply to how your site is hosted.
PHP
The runtime the site is actually served by — with the SAPI caveat in mind.
| Check | What it looks at |
|---|---|
OPcacheopcache | That PHP’s bytecode cache is enabled and large enough to hold Craft, its plugins and your templates without evicting them — memory, file count, interned strings, hit rate, restarts and timestamp validation. The highest-value check in the plugin: Craft is several thousand PHP files before a single plugin is installed, and without OPcache every one is read, parsed and compiled on every request. |
PHP versionphpVersion | The version against the one Craft performs best on, and against PHP’s own security support schedule. |
Memory limitmemoryLimit | memory_limit against what Craft needs for image transforms, project config and large queries. |
Request limitsrequestLimits | max_execution_time, max_input_vars and the upload limits, against what the control panel needs to save large entries and assets. |
Performance extensionsphpExtensions | Optional extensions that let Craft take a faster path — shared-memory caching (APCu, Redis), Imagick, and Zstandard compression. |
Realpath cacherealpathCache | The size and lifetime of PHP’s path resolution cache, which Composer-based applications lean on heavily. |
Database
MySQL and MariaDB, measured against your real data volume. On PostgreSQL every check here records itself as skipped.
| Check | What it looks at |
|---|---|
InnoDB buffer poolinnodbBufferPool | The buffer pool against the size of Craft’s data, and how often pages are being read from disk instead of served from memory. |
Database versiondatabaseVersion | The MySQL or MariaDB version against the one Craft is tuned for. |
Table sizestableBloat | Craft tables that have grown out of proportion to the site’s actual content — usually revisions, sessions or the queue. |
Temporary tablestempTables | How often the database has to write temporary tables to disk while sorting and grouping. |
Slow query logslowQueryLog | Whether slow queries are being logged at all, and how many the server has seen. |
ConnectionsconnectionLimits | Connection limits, refused connections, and the thread and table caches. |
Query cachequeryCache | Whether MariaDB’s query cache is enabled, which serialises writes behind a global lock. |
Server
The machine and the connection in front of it. Several of these read short, read-only shell commands; if shell probes are off or the host blocks them, the check skips rather than guesses.
| Check | What it looks at |
|---|---|
System resourcessystemResources | CPU count, available memory and load average, where the environment allows it. |
Response compressioncompression | Whether HTML responses are gzip- or Brotli-compressed before they go over the wire. |
HTTP protocolhttpProtocol | The HTTP version in use and whether the connection is secure. |
Disk spacediskSpace | Free space on the volume holding the site. |
Craft
Craft’s own configuration, read from the running install rather than from a config file on disk — so per-environment overrides and .env values are reflected accurately.
| Check | What it looks at |
|---|---|
Dev modedevMode | That development-only settings — dev mode, admin changes, template debugging — are off in production. |
CachingcacheConfig | The cache driver, template caching and session storage. |
QueuequeueRunner | How background jobs are run, and whether a backlog has built up. |
Image handlingimageHandling | The image driver, when transforms are generated, and whether Craft is optimising the files it produces. |
Garbage collectiongarbageCollection | Revision limits, soft-deleted content, and whether anything is actually cleaning up. |
Project configprojectConfig | The size of the project config, and whether Craft is watching it for changes in production. |
Content schema
The shape of your content, not the content itself. These checks count fields, layouts and totals; they never read a field value.
| Check | What it looks at |
|---|---|
Field layoutsfieldLayouts | Layouts wide enough to slow the entry editor down — or to overflow max_input_vars and silently lose content on save, which is the failure mode nobody diagnoses on the first try. |
Field usagefieldUsage | How many custom fields exist, and any that aren’t used in a single field layout. |
Content volumecontentVolume | How much content the site holds, and the point at which unbounded queries stop being survivable. |
Templates
One check, running eight structural rules over every Twig file. It gets its own page.
| Check | What it looks at |
|---|---|
Template analysistemplates | Element queries inside loops, relational fields executed per row, unbounded queries, missing eager loading, transforms in loops, missing {% cache %}, includes without only, and images missing dimensions or loading hints. |
Turning a check off
Go to Microscope → Checks and switch it off. A disabled check does not run and does not appear in reports at all — it is not the same as a skipped one, which ran the availability test and could not proceed.
Checks are opted out of rather than into. The stored setting is a list of disabled handles, which starts empty — so a check added in a later release starts working on upgrade, instead of sitting silently disabled because it was not in a list written before it existed.
Your own checks
Plugins and modules can register checks of their own, which appear in this catalogue, get scored the same way and print on the same report. See Extending.