A storefront is a plain JSON file that the Open Storefront client fetches from Google Drive and parses at runtime. It describes a menu of items that users can browse in the terminal: each item is either a downloadable file or a link to another nested storefront. The client displays every key in the object as a labelled menu option, and the associated array value tells it exactly what to do when the user selects that option.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/drake-rochelle/open-storefront/llms.txt
Use this file to discover all available pages before exploring further.
Top-Level Structure
A storefront file is a single JSON object. Each key becomes the label shown to the user in the terminal menu. Each value is a JSON array whose contents depend on whether the entry points to a downloadable file or to another storefront.Entry Types
- File Entry
- Storefront Entry
A file entry tells the client to download a resource to the user’s local machine. The array must contain exactly three elements.
| Field | Position | Description |
|---|---|---|
download_url | [0] | The full HTTP/HTTPS URL the client passes to urllib.request.urlretrieve to fetch the file. Any publicly accessible direct-download URL is valid — it does not have to be a Google Drive link. |
filename | [1] | The name the file is saved as on disk. This is appended to the resolved destination path. |
destination_path | [2] | The directory path on the user’s device where the file is saved. Paths that begin with /3DS Storefront/ are automatically rewritten to /Open Storefront/ at download time. See Path Format for details. |
Full Example
The followingstorefront.json demonstrates both entry types together — one sub-storefront link and one downloadable file:
My Sub-Storefront navigates into the linked storefront, while selecting MyApp.3dsx downloads the file to the resolved Homebrew directory.
Special Key: main.txt
If a storefront contains a key named exactly main.txt, the client handles it automatically before drawing the menu. It downloads the associated file, reads its contents, and executes them as Python code using exec(). After execution completes, the client pushes x into the input buffer, which navigates the user back to the home storefront.
The main.txt entry follows the same three-element file-entry format as any other file:
Path Format
Destination paths in file entries conventionally start with/3DS Storefront/ followed by a subdirectory name. At download time the client automatically replaces the /3DS Storefront/ prefix with /Open Storefront/, so files land in the correct location on the user’s machine regardless of whether the storefront was originally authored for an older path convention.
For example, a destination of /3DS Storefront/Homebrew resolves to ~/Open Storefront/Homebrew (or the equivalent under the user’s configured download path). All intermediate directories are created automatically if they do not already exist.