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.
Extensions
Extensions allow your app to add custom UI and functionality directly into merchant stores. There are four types of extensions:
Theme Blocks
Add blocks to store themes that merchants can position in their storefront
Checkout UI
Extend checkout with custom fields, upsells, and integrations
Post-Purchase
Show content after order placement
Admin Blocks
Add panels to the merchant admin dashboard
How Extensions Work
- You define extension files (templates + schemas)
- You upload extensions via API when your app is installed
- Merchants configure extension settings in theme editor
- LaunchMyStore renders your extension in the appropriate context
Extension File Structure
Extensions are stored in your app’s extension directory:
public/extensions/{domainSlug}/{appHandle}/
├── blocks/
│ ├── product-reviews.aqua # Liquid template
│ └── product-reviews.schema.json # Block schema
├── snippets/
│ └── review-stars.aqua # Reusable snippets
├── assets/
│ ├── extension.css
│ └── extension.js
└── app.json # Extension manifest
Extension Manifest
The app.json file declares your extensions:
{
"handle": "my-reviews-app",
"name": "Product Reviews",
"version": "1.0.0",
"extensions": {
"theme_blocks": [
{
"handle": "product-reviews",
"name": "Product Reviews Block",
"target": "product"
}
],
"checkout_ui": [
{
"handle": "trust-badges",
"name": "Trust Badges",
"target": "checkout.cart-line-list.render-after"
}
],
"admin_blocks": [
{
"handle": "reviews-panel",
"name": "Reviews Panel",
"target": "product.details.block"
}
]
}
}
Installing Extensions
When your app is installed, upload extension files to the store:
// After OAuth completes
await fetch('https://store.launchmystore.io/api/apps/install-extensions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
domainSlug: 'merchant-store',
appHandle: 'my-reviews-app',
blocks: [
{
handle: 'product-reviews',
template: '{% comment %}Liquid template{% endcomment %}...',
schema: { /* block schema */ }
}
],
snippets: [
{ handle: 'review-stars', template: '...' }
],
assets: [
{ filename: 'extension.css', content: '...' }
]
})
});
Uninstalling Extensions
When your app is uninstalled, clean up extension files:
await fetch('https://store.launchmystore.io/api/apps/uninstall-extensions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
domainSlug: 'merchant-store',
appHandle: 'my-reviews-app'
})
});
Extension Templates
Extensions use Liquid templating, identical to Shopify themes:
{% comment %} product-reviews.aqua {% endcomment %}
<div class="reviews-widget" data-product-id="{{ product.id }}">
<h3>{{ block.settings.title }}</h3>
{% if block.settings.show_rating %}
<div class="average-rating">
{% render 'review-stars', rating: product.metafields.reviews.rating %}
</div>
{% endif %}
<div class="reviews-container" id="reviews-{{ product.id }}">
Loading reviews...
</div>
</div>
<script src="{{ 'extension.js' | extension_asset_url }}"></script>
Block Schemas
Define settings merchants can configure:
{
"name": "Product Reviews",
"target": "product",
"settings": [
{
"type": "text",
"id": "title",
"label": "Section Title",
"default": "Customer Reviews"
},
{
"type": "checkbox",
"id": "show_rating",
"label": "Show Average Rating",
"default": true
},
{
"type": "range",
"id": "reviews_per_page",
"label": "Reviews Per Page",
"min": 5,
"max": 50,
"step": 5,
"default": 10
}
]
}
Available Targets
Theme Blocks
index - Homepage
product - Product pages
collection - Collection pages
cart - Cart page
article - Blog articles
page - Custom pages
Checkout UI
checkout.cart-line-list.render-after
checkout.contact.render-after
checkout.shipping-method-list.render-after
checkout.payment-method-list.render-after
checkout.order-summary.render-after
Admin Blocks
product.details.block
order.details.block
customer.details.block
collection.details.block
discount.details.block
- And 26 more targets