Import and Export Advanced Storefronts
An Advanced storefront is a React and Vite project you own. Shoppex packages it as a ZIP so you can keep a backup, hand the project to someone else, work on it locally, or bring an existing project in as a new storefront. Easy (visual) themes are not part of this page. They export as ThemeDocument JSON instead — see Editing Themes.Export
Download the current source tree plus a package manifest as one ZIP.
Import
Upload a ZIP as a brand new storefront, or replace the source of an
existing one.
Export a storefront
There are three ways to get the ZIP, and all three produce the same archive:- From the storefront list — open Store → Storefronts, switch to Advanced, and choose Download source ZIP from a storefront card’s menu.
- From the code editor — open the storefront and use the Download action in the toolbar.
- From the CLI — run
shoppex storefront export. See the Theme CLI Reference for flags and authentication.
storefront-source-8f1c4a90d2b7.zip).
What the ZIP contains
The archive holds your complete source tree for the current revision, plus one extra file at the archive root:shoppex.theme.json, the package manifest.
content is what you edited in the Design tab — the draft when one exists,
otherwise the published copy, and null when the storefront still runs on the
defaults shipped in its files.
shoppex.theme.json is metadata, not source. Shoppex adds it to the ZIP on
export and consumes it on import, and you cannot create a source file with
that name — the name is reserved.The round-trip promise
- Import applies the manifest’s
content. Export a storefront, import the ZIP, and your Design content comes back with it instead of falling back to the template defaults. - Replace never applies it. The storefront you are replacing already owns its own Design content, and a source swap must not silently overwrite it. The response tells you when a package carried content that was not applied.
code_templateis provenance for humans only. It is never restored onto the imported storefront, so a paid template stays a purchase and cannot travel in an archive.
Import a ZIP as a new storefront
Open Store → Storefronts, switch to Advanced, and use Import ZIP. Give the storefront a name, drop in the archive, and Shoppex creates it and starts the first build immediately. The archive must satisfy these:
Also true of every accepted archive:
- Symbolic links are rejected, and so are absolute paths or paths containing
... - Paths that collide only by letter case (
Header.tsxandheader.tsx) are rejected. - If everything sits inside a single top-level folder, that folder is stripped, so zipping a project directory works as expected.
- These are dropped before anything is stored:
__MACOSX,.git,node_modules,dist,.turbo,.shoppex, and any.DS_Store. - A
shoppex.theme.jsonat the root is consumed as the package manifest. If it is present but not a valid manifest, the import fails rather than quietly importing just the files.
The Design tab
If the archive shipssrc/config/content-defaults.json, the Design tab in
the editor has fields to edit and the import opens the editor directly. An
archive without it is still a perfectly valid storefront — the import just tells
you the Design tab will be empty, and you edit in Code or with AI instead.
Replace the source of an existing storefront
Open the storefront in the editor and use Replace Source from ZIP. Every current file is deleted and replaced by the contents of the archive. A replace is guarded by the source revision you loaded. If someone else — or an AI edit, or a CLI push — saved in the meantime, the upload is rejected with a conflict instead of overwriting their work. Reload the storefront and try again. The replace uploads the tree; it does not build. The dialog starts a build for you right after, and you can always press Build yourself. The CLI covers the same ground for a local checkout:shoppex storefront push
sends your working copy under the same revision guard and enqueues the build.
See the Theme CLI Reference.
What the build expects
Every import and every replace ends in the same pipeline: install, build, collect the output, upload it as an immutable artifact.- Dependencies are installed from your lockfile with lifecycle scripts
disabled. Commit
bun.lockorbun.lockbfor a reproducible, frozen install. - Your
buildscript runs in a sandbox with no network access. Anything it needs must already be in the project or its dependencies. - The output must land in
dist,out, orbuild, and must containindex.html. - The finished artifact is capped at 200 MB and 20,000 files.