Fixing the Theme Is Missing style.css Error
The zip you uploaded is not a theme, or the theme is inside it one level too deep. Marketplace downloads bundle the installable zip with documentation, and uploading the bundle is the cause nine times out of ten.
WordPress looked for style.css at the root of the zip, or inside its single top-level folder, found nothing, and stopped. "The package could not be installed. The theme is missing the style.css stylesheet." does not mean the file is absent from the theme. It means the file is not where the installer looks. A style.css that exists but has no theme header produces a different message — "The style.css stylesheet does not contain a valid theme header." — so this one is always about where the file is, never what is in it.
Open the zip before uploading it
Unzip the download on your computer and look at what is inside. One of these shapes will match:
| Inside the zip | What it is | What to do |
|---|---|---|
style.css, functions.php, index.php … |
An installable theme, contents at root | Upload as is |
theme-name/style.css … |
An installable theme in one folder | Upload as is |
theme-name.zip, Documentation/, Licensing/, child-theme.zip |
A marketplace bundle | Upload theme-name.zip from inside |
theme-name/theme-name/style.css |
A zip of the parent folder | Re-zip the inner folder |
plugin-name.php, readme.txt |
A plugin | Install it from Plugins › Add New |
index.html, css/, js/ |
An HTML template, not a WordPress theme | Not installable |
The bundle row is the common one. Theme marketplaces package the installable theme alongside documentation and sample content, and the download's name looks like a theme. Uploading it on Appearance › Themes › Add New › Upload produces exactly this message, because the installer finds zips and folders but no style.css. The installable file is usually named after the theme and sits at the bundle's top level, sometimes next to a child-theme zip; the marketplace theme guide shows what a typical bundle contains.
The zip-of-a-folder case
The installer descends into the zip only when it contains exactly one top-level entry and that entry is a folder. When you build a zip yourself — a child theme, a theme downloaded from a repository as source, a theme copied from another site — compressing the folder that contains the theme folder adds a level. Windows, macOS and most GUI tools do this when you right-click the parent. The result is theme.zip/theme/theme/style.css, two levels down, and WordPress inspects only the first.
Re-zip the theme folder itself so its name is the only top-level entry:
cd /path/to/themes
zip -r my-theme.zip my-theme -x '*.DS_Store'
A zip made in Finder may also contain a __MACOSX folder; WordPress skips it during extraction, so it is harmless for the install, and the exclusion above only keeps the archive tidy.
Related messages that look the same
The theme installer runs a short sequence of checks and each failure has its own wording:
| Message | Meaning |
|---|---|
| The theme is missing the style.css stylesheet. | No style.css at the root or in the single top folder |
| The style.css stylesheet does not contain a valid theme header. | File found, but no Theme Name: line in its header comment |
| The theme is missing the index.php file. | Parent theme with style.css but no index.php and no templates/index.html |
| The parent theme is missing. Please install the parent theme. | Child theme whose Template: names a theme that is not installed |
The second row is what a starter kit with an empty style.css produces, and the fix there is the header, not the zip. A minimal header has Theme Name: for a parent and Theme Name: plus Template: for a child, where Template must match the parent's folder name exactly; the child theme guide shows the shape. The fourth row is the one you meet when the bundle's child-theme zip is uploaded before the parent.
Repository downloads
A theme downloaded from a code hosting site as "source" arrives as repo-name-main.zip with the files one folder down — installable as is — but may lack a build step's output, such as compiled CSS. The structure check passes and the theme installs; what fails is the site's appearance. That is a different problem, and a theme distributed that way expects to be built before installation.
When uploading is the wrong route
A theme larger than the upload limit, or one that fails for reasons the installer does not explain, can be installed by unzipping it and copying the folder to wp-content/themes/ over SFTP. WordPress scans the folder on the next visit to Appearance › Themes and lists anything with a style.css carrying a header. If the theme is listed under Broken Themes, the message there names what is missing — the stylesheet, a template file, or the parent. If it is not listed at all, the folder is nested one level too deep. The full install procedure, including this route, is in how to install a theme.
Verify
Appearance › Themes lists the theme with its name and screenshot. Activate it — or, for a child theme, confirm the parent is installed first, or the child shows as broken with a message naming the missing parent. If the error reappears on a later update uploaded the same way, you uploaded the bundle again; keep the installable zip, not the download, for next time.
Frequently asked
- Because the zip you uploaded contains the theme zip, not the theme. Marketplace downloads are bundles with documentation, licensing and one or more installable zips inside. Unzip the download on your computer and upload the installable theme zip from inside it.
- A child theme's style.css must be at the root of the zip or inside a single top-level folder. Zipping the folder that contains the theme folder produces theme.zip/theme/theme/style.css, which WordPress does not look inside. Zip the theme folder itself, not its parent.
- The plugin version reads 'No valid plugins were found' and has the same causes: a bundle instead of the plugin zip, a nested folder, or a plugin uploaded on the theme screen. Check which installer you used.