> ## Documentation Index
> Fetch the complete documentation index at: https://docs.joinmarkt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload rules

> Upload a React, Vite, Liquid or Nunjucks theme as a ZIP: what is kept, the limits and every error.

Upload a theme as a ZIP in the theme hub. React, Vite, Liquid and Nunjucks themes are all accepted.

## How the type is found

| The ZIP has | It is read as | Opens in |
| - | - | - |
| `theme.json` with `"runtime": "react"` | React kit | Visual + Code |
| `theme.json` with `"runtime": "vite"` | Vite kit | Visual + Code |
| `theme.json` with `"runtime": "liquid"` | Liquid kit | Visual + Code |
| `.njk` files | Nunjucks | Code |
| `.liquid` files, no `theme.json` | imported Liquid | Code |

With no `runtime`, a `theme.json` theme is read as React.

## What is kept

> [tab] Kept
>
> | Where | Files |
> | - | - |
> | Top level | `theme.json`, `index.html`, `package.json`, `tailwind.config.*`, `LICENSE`, `README.md` |
> | Folders | `templates/`, `groups/`, `config/`, `src/`, `public/`, `snippets/` |

> [tab] Dropped quietly
>
> `node_modules`, `.git`, `__MACOSX`, `.DS_Store`, `Thumbs.db`, `desktop.ini`, `dist/`, `build/`, `.vite/`, lock files, and any file or folder starting with a dot.

> [tab] Ignored, with a note
>
> `vite.config.*`, `postcss.config.*`, `tsconfig*.json`, and `src/platform/`. The platform brings its own.

> [!TIP]
>
> The theme can sit inside one top folder in the ZIP, like `my-theme/theme.json`. It is removed for you.

## Limits

| Limit | Value |
| - | - |
| Files | 2,000 |
| Total size | 25 MB |
| One file | 2 MB |

## Errors

Each error blocks the upload. Fix it and upload again.

| Error | Fix |
| - | - |
| The theme is missing its theme.json file. | add `theme.json` at the top |
| theme.json is incomplete or wrong: check ... | fix the named fields: `engine`, `id`, `name`, `version` |
| The theme has no home page (templates/index.json). | add `templates/index.json` |
| index.html is missing or doesn't load the store. | load `/src/platform/entry.tsx` in `index.html` |
| The theme has no sections (src/sections/\<name>/schema.json). | add at least one section with a `schema.json` |
| package.json can't be read. | make it valid JSON |
| package.json runs a "..." script on install. | remove `preinstall`, `install`, `postinstall`, `prepare` and the like |
| Uses packages Join Markt can't build: ... | use only the packages our own themes use |
| ... is larger than 2 MB. | shrink that file |
| The theme is too big: keep it under 2000 files and 25 MB. | remove unused files |
| Rename these files (letters, numbers, dots and dashes only): ... | rename them |
| We couldn't recognise this theme. | add `theme.json`, or `.njk` / `.liquid` files |

The safety check also blocks harmful code, like scripts that read cookies or send data to other sites.

> [!NOTE]
>
> An uploaded theme belongs to the seller who uploaded it. Other sellers can't use it, even with its ID.

## After upload

The theme is saved like a catalog theme. Edit it, preview it, and press **Publish** to put it live.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.