Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.launchmystore.io/llms.txt

Use this file to discover all available pages before exploring further.

App Listing & Detail Page

LaunchMyStore renders an installed app’s in-admin detail page (/admin/apps/{handle}) and the marketplace listing (/marketplace/{handle}) from the same Apps row. This page is the field-by-field reference for everything you control on those two screens — what shows where, how to author it, and the publishing flow. This guide is for developers using the Developer dashboard at app.launchmystore.io/developer/apps to ship public apps to the marketplace.

Where each field shows up

FieldMarketplace listingIn-admin detail page
namecard title + heroheader title
iconUrlcard + hero iconheader icon
taglinecard subtitleheader subtitle
descriptionshort summary
categoriescategory filter
pricingprice label”Plan” row
images (screenshots)gallery
worksWith”Works with” pills”Works with” pills
installationGuideGetting started section
tutorialVideoUrlembedembed
privacyPolicyUrl, supportEmail, documentationUrlfooter linksfooter links
extensions.settingsSettings card
extensions.{storefrontBlocks, checkoutExtensions, …}“What this app adds”

Authoring fields at app creation

Open /developer/apps/create. The Listing Details section captures the three fields that change how the in-admin detail page reads:
tagline
string ≤100
The one-line subtitle under your app name. Both screens show this.
worksWith
string[]
Newline-separated list of third-party services / platforms (e.g. Klaviyo, Google Shopping, Meta Shops). Renders as pills.
installationGuide
markdown
Setup instructions shown as the Getting started section on the in-admin detail page. See Writing a good installationGuide.
You can edit all of these later from /developer/apps/{appId}Listing tab. Saving there issues a PATCH that the platform live-replays into both the marketplace listing and every merchant’s in-admin detail page — no re-publish needed.

Detail page anatomy

+--------------------------------------------------------------+
| [icon]  Your App Name                  [Install on store] ▶  |
|         tagline goes here                                    |
+--------------------------------------------------------------+
|  Note: Not installed on your store yet.                      |  ← only when no installation
+--------------------------------------------------------------+
|  ⚙ Settings                                                  |
|  └─ rendered from extensions.settings                        |
+--------------------------------------------------------------+
|  🚀 Getting started                                           |
|  └─ rendered from `installationGuide` (Markdown)             |
|  └─ if blank, auto-generated from your extension manifest    |
+--------------------------------------------------------------+
|  Puzzle  What this app adds                                  |
|  └─ list of extensions: blocks, snippets, functions, etc.    |
+--------------------------------------------------------------+
|  Works with                                                  |
|  └─ pills from `worksWith`                                   |
+--------------------------------------------------------------+
|  Support · Privacy · Docs                                    |
+--------------------------------------------------------------+
The Install button only appears when the merchant has no installation row for this app. Clicking it opens /marketplace/{handle} where the standard OAuth → install flow runs.

Writing a good installationGuide

This is plain Markdown. The renderer is intentionally minimal — it supports:
  • Headings: #, ##, ###
  • Bold (**text**), italic (*text* or _text_), inline code (`text`)
  • Links: [label](https://…) — open in a new tab automatically
  • Ordered lists (1., 2., …) and unordered lists (-, *, +)
  • Paragraphs (separated by a blank line)
It does not support: HTML, images, tables, footnotes, or fenced code blocks. Keep instructions short and step-driven; merchants are usually on their first install when they read this.

Example — extension-only app

# Get Plinth running in 60 seconds

1. Open **Appearance → Themes** and click *Customize* on your live theme.
2. In the section picker, add the *Plinth bar* block above the **Header**.
3. Pick a style — *Trust badges*, *Free shipping*, or *Announcement*.
4. Set your **free-shipping threshold** under the **Settings** card on this page.

That is it — refresh your storefront and the bar appears across every page.

**Tip:** schedule a holiday-only bar by toggling *Show on homepage* off.

What happens if you leave it blank

The detail page auto-generates a “Getting started” section from your extension manifest:
Extension typeAuto-generated copy
Storefront blocks”Open Appearance → Themes and add the {block} block.”
Snippets”Use {% raw %}{% render '{handle}' %}{% endraw %} in your theme.”
Checkout / post-purchase extensions”Renders automatically at checkout.”
Admin blocks”Appears at in admin.”
Functions”Runs as a {type} function.”
Settings”Configure under Settings on this page.”
This is good enough to ship a v1, but writing your own guide is strongly recommended — auto-generated copy is generic and will not tell merchants the why (e.g. “set a threshold of $75 to recover 80% of abandoned carts”).

Field reference

These are the columns on the Apps table that the developer dashboard exposes. All are optional unless marked required.
FieldTypeNotes
handlestringrequired, lowercase + hyphens, immutable after publish
namestringrequired
descriptiontextshown on the marketplace card
taglinestring ≤100shown under the app name
developer, developerUrlstringpopulated by backend from auth
appUrlURLif set, the in-admin page renders an iframe instead of the extension-only detail page
tutorialVideoUrlURLoptional embed
typeenumpublic, private, first-party
versionsemvere.g. 1.0.0
categoriesstring[]one of: selling-products, store-design, store-management, finding-products, orders-and-shipping, marketing-and-conversion
worksWithstring[]third-party services (Klaviyo, Meta Shops, etc.)
installationGuidetextMarkdown setup instructions
pricingjsonb{model, monthlyPrice, yearlyPrice, currency, trialDays, usage?}usage: {unitName, unitAmount, cappedAmount, terms?} declares a metered component (see Usage Billing)
commissionRatenumberplatform default 0.06 (6%)
imagesobject[]screenshots — {url, alt}
iconUrlstring52×52 marketplace card + admin header
redirectUrlsstring[]OAuth callbacks
scopesstring[]requested OAuth scopes; validated against ALL_SCOPES
extensionsjsonbmanifest of storefrontBlocks, storefrontSnippets, checkoutExtensions, postPurchaseExtensions, adminExtensions, functions, settings
isPremiumbooleantrue for paid-only apps
privacyPolicyUrl, supportEmail, documentationUrlURL/emailshown on the detail page
extensions.settings is what powers the in-admin Settings card. Each entry is {type, key, label, default, ...} (text, number, boolean, select). Settings render in disabled / preview mode if the merchant has not installed the app yet.

Two render modes for the in-admin page

/admin/apps/{handle} chooses one of two layouts based on whether appUrl is set:

AppEmbedFrame

Used when appUrl is set. Renders your hosted iframe with the App Bridge SDK loaded. You own the entire UI inside the frame.Use this for apps with a hosted dashboard, custom forms, or any UI beyond declarative extensions.

ExtensionOnlyDetailPage

Used when appUrl is null / empty. Platform-rendered header + Settings + Getting started + extensions list.This is the right choice for declarative apps (theme blocks, WASM functions, admin blocks) that don’t need a hosted dashboard.
If you want the platform-rendered detail page, leave appUrl empty.

Publishing flow

1

Create the app

At /developer/apps/create choose Save as Draft or Submit for Review. Drafts let you edit freely without affecting any merchant.
2

Add extensions and functions

At /developer/apps/{appId} use the tabs Extensions, Functions, Webhooks to register what your app contributes to the storefront, checkout, and admin.
3

Submit for review

Status moves draft → review → published. Review checks scopes, redirect URLs, and listing copy.
4

Merchants install

Once published, merchants see your app on /marketplace. Install writes a row to AppInstallations and copies your blocks / snippets into the merchant’s public/extensions/{domainSlug}/{handle}/ directory on CustomerLMS.
A clean uninstall removes the directory and invalidates AssetLoader.invalidateExtension automatically — no leftover files pollute the merchant’s storefront.

See also