86d is positioned as the open-source alternative to Shopify, so a common first project is moving an existing Shopify store onto 86d. This guide walks through the migration end to end. It assumes you already have an 86d store running locally; if not, see Quickstart.Documentation Index
Fetch the complete documentation index at: https://86d.app/docs/llms.txt
Use this file to discover all available pages before exploring further.
Migration tooling is improving rapidly. This page captures the manual workflow today. Where automation exists, it is called out inline.
What maps where
| Shopify concept | 86d equivalent |
|---|---|
| Store / shop | An 86d store running this codebase |
| Theme | A template under templates/<theme>/ |
| Liquid sections / blocks | MDX pages and module components |
| App | A module under modules/<name>/ |
| Product, variant, collection | @86d-app/products, @86d-app/collections |
| Customer, address | @86d-app/customers, @86d-app/saved-addresses |
| Order, fulfillment, refund | @86d-app/orders, @86d-app/fulfillment, @86d-app/payments |
| Discount, promotion | @86d-app/discounts |
| Gift card | @86d-app/giftcards |
| Pages, blog | @86d-app/pages, @86d-app/blog |
| Shopify Markets | @86d-app/multi-currency, @86d-app/tax |
| Shopify POS | @86d-app/kiosk, @86d-app/toast |
| Shopify Shipping | @86d-app/shipping, @86d-app/fulfillment |
| Shopify Payments | @86d-app/payments plus a gateway module (stripe, paypal, square, braintree) |
| Shopify Functions | Custom modules |
| Webhooks | Module domain events plus your own subscribers |
Step 1: pick your modules
Open your active template’sconfig.json and enable the modules that match your Shopify capabilities. A baseline cutover usually needs:
86d generate after editing.
Step 2: export Shopify data
Use Shopify Admin’s built-in CSV export for products, customers, and orders:- Products: Admin → Products → Export → All products → CSV
- Customers: Admin → Customers → Export → CSV
- Orders: Admin → Orders → Export → CSV
- Discounts and gift cards: requires the Shopify Admin GraphQL API
Step 3: transform and import
@86d-app/import-export accepts CSV and JSON for the entities it covers. Map Shopify fields to 86d fields with a small ETL script (TypeScript, Python, anything). Key mappings:
- Shopify
Variant Price(dollars) -> 86dprice(cents). Multiply by 100. - Shopify
Compare At Price-> 86dcompareAtPrice(cents). - Shopify
Tags(comma-separated string) -> 86dtags(array). - Shopify product
Handle-> 86dslug. - Shopify
Status(active/draft/archived) -> 86dstatus(same values).
POST /admin/products/import, POST /admin/collections/create, and so on. Or use bun run scripts/import-shopify.ts if you have written one.
Step 4: redirect old URLs
Shopify themes use/products/<handle>, /collections/<handle>, and /pages/<handle>. 86d uses the same shapes, so most product and collection URLs work without redirects. For anything that changed:
POST /admin/redirects.
Step 5: rebuild your theme
Shopify Liquid does not translate to MDX directly. Pick the closest module component for each section of your old theme, place it in the corresponding MDX page, and lift any custom HTML or CSS:| Liquid section | 86d component |
|---|---|
featured-collection.liquid | <FeaturedCollections /> |
product-grid.liquid | <ProductGrid /> or <FeaturedProducts /> |
cart-drawer.liquid | <Cart /> plus <CartButton /> |
newsletter.liquid | <NewsletterInline /> |
header.liquid | Your Navbar component in the template |
footer.liquid | Your Footer component |
Step 6: configure payments
Pick a gateway module (stripe, paypal, square, or braintree) and follow Payment gateways. Stripe is the closest analog to Shopify Payments and the most fully featured.
Step 7: configure shipping and tax
- Shipping zones and rates: configure in Admin → Fulfillment → Shipping (or via
@86d-app/shippingadmin endpoints). - Tax: enable
@86d-app/taxand add your jurisdictions and nexus rules.
Step 8: cut over
When you are ready to switch:- Freeze writes on Shopify (set the store to password-protected mode).
- Run a final delta import (orders placed since your initial import).
- Update DNS to point at your 86d deployment.
- Verify gift card balances, store credit, and active subscriptions all carried over.
- Re-enable order placement.
/admin/audit-log (if @86d-app/audit-log is enabled) for the first 24 hours.
What does not migrate (yet)
- Shopify Functions: there is no automatic translator. Re-implement them as modules.
- Shop Pay accelerator: the closest analog is Stripe Link plus saved payment methods on
@86d-app/payments. - Shopify Markets currency rounding rules: enable
@86d-app/multi-currencyand configure rounding manually per currency. - Theme app extensions: re-implement as module store components, then drop them in your MDX templates.

