A Shopify Alternative For Developers
Two questions usually bring somebody here: whether a platform will accept what they sell, and whether they can build the storefront themselves instead of working inside a theme. This is the answer to both, and it is a different shape of product rather than a cheaper version of the same one.
Why People Go Looking
Shopify is a good product and most stores on it should stay on it. The people who leave tend to leave for one of four reasons, and only the first is about being turned down.
The Category Was Refused
You sell something a hosted platform restricts, and you found out after the store was built rather than before.
The Theme Is The Ceiling
You write code for a living and the customisation model is a template language plus a list of apps.
The Second Store Is Another Bill
One business, several brands, and each storefront is a separate account with its own catalog to keep in step.
The Data Is Over There
Reporting stops where the platform decides it stops, and the raw rows are not yours to query.
Hemp, THCA And CBD Are A Supported Case Here
Every hosted platform publishes a list of businesses it will not serve, and decides which payment methods a restricted category may use. Those lists are theirs and they move, so read the current one rather than a competitor’s summary of it. What matters for your decision is what happens on this side.
These categories are in the product rather than an exception argued over email. Payments run through Authorize.net with authorize then capture, ACH covers the wholesale-sized orders where card fees stop making sense, and Fraud Detection Suite holds arrive as a review state on the order for a person to work through.
The whole of what that involves// Tokenize in the browser. You never see the card number.await dash.payment.load()const token = await dash.payment.tokenize(cardData)// Or the same processor behind a one-tap wallet.const gpay = dash.payment.googlePay({ merchantName })const order = await dash.checkout.complete({ shipping, payment_token: token })// A fraud hold comes back as a review status, not a// swallowed failure you hear about from a customer.One Backend, As Many Storefronts As You Need
A hosted platform ships the storefront and the backend as one thing, which is most of why it is easy to start with. Here they are separate: the backend is catalog, orders, customers, payments and content behind one typed API, and the storefront is whatever you already build in.
A key pair is a whole store. A second brand is a second key against the same backend, with its own catalog and its own custom domain, not a second subscription to keep in step by hand.
How the isolation actually worksimport { DashClient } from "dash4devs"// Same SDK, same backend, isolated data.const brandA = new DashClient({ apiKey: process.env.BRAND_A_KEY })const brandB = new DashClient({ apiKey: process.env.BRAND_B_KEY })const a = await brandA.products.list() // only Brand A's catalogconst b = await brandB.products.list() // only Brand B's catalogWhat Actually Changes
Not a scorecard. The six places the day-to-day differs once the storefront and the backend stop being the same product.
- The storefront
- Your framework, your repo, our SDK as a plain ES module
- A store
- A pk_ and sk_ key pair per organization
- A second brand
- Another key against the same backend
- Payments
- Stripe, Authorize.net, Google Pay, ACH
- State restrictions
- Checked at checkout, with per-product exceptions
- Your data
- First-party analytics in the backend, and a REST API over it
The trade is real and worth saying plainly: you are taking on the storefront. That is the right trade if you were going to write the front end anyway, and the wrong one if you were not.
When Shopify Is The Right Choice
Read this part before you migrate anything.
If nobody on your team writes code, stay where you are. A hosted platform gives you a storefront without a developer, and that is a genuine thing to be given. Here the storefront is yours to build, which is an advantage only when somebody is going to build it. The same goes for a large installed base of apps you depend on: those are somebody else’s integrations, and they do not come with you.
We also cannot promise you a merchant account. Boarding is the processor’s decision, made on your business, and no platform gets to overrule it. What we can say is that the integration is already here and the category is designed for rather than tolerated.
Not sure whether your catalog fits? Ask before you migrateBring The Catalog You Already Have.
Tell us what you sell and we will tell you straight away whether it fits here. A straight no now is worth more than a migration you have to undo.