Coding Freedom, No Buts.
No proprietary framework. No required theme engine. No runtime you have to host. The SDK is a plain JavaScript client that runs wherever JavaScript runs, and everything above the data layer is your call.
import { DashClient } from "dash4devs"const dash = new DashClient({ apiKey: "pk_live_…" })// This line does not change with your framework.const { products } = await dash.products.list()- Next.js
- Remix
- Astro
- SvelteKit
- Vue
- Vanilla JS
A Client, Not A Cage
A lot of developer-friendly platforms are only friendly until you try to leave. They ship a bespoke templating language, a mandatory build step, or a hosting runtime you cannot replace. The day your needs outgrow the happy path, you are not extending anything. You are rewriting.
The line sits somewhere else here. The product is the backend and the client that talks to it. That client is an ordinary ES module exporting a DashClient class, and it has no opinion about your router, your CSS, your component library or your host. If your framework can await fetch(), it can use this.
The Same Line Of Code, Everywhere
Because the client is framework-agnostic, moving between stacks does not mean relearning the platform. The data-layer code is identical in a Next.js server component, an Astro frontmatter block, a Remix loader or a cron script that runs on a box under your desk.
That holds for the whole surface, not just the catalog. The panel beside this is the same client reading products, the cart, the checkout, the signed-in shopper and the content, and none of those lines would change if you moved the site to a different framework tomorrow.
// Use it anywhere: server or browser.const products = await dash.products.list()const cart = await dash.cart.get()const order = await dash.checkout.complete({ … })const posts = await dash.blog.list()const reviews = await dash.products.getReviews("slug")// Same client, signed in as the shopper.const history = await dash.auth.getOrders()const book = await dash.auth.getAddresses()const rates = await dash.shipping.getRates({ … })// And the content the same backend is serving.const about = await dash.pages.getByPath("/about")const coas = await dash.coa.list()One Package, Not One Per Framework
The thing you install is the same thing whatever you install it into, and it is not the only way in.
One Package
There is no dash4devs/next behaving differently from dash4devs/astro. There is one client.
Helpers Are Opt-In
A React <DashImage> for served image variants exists. It is an optional import, never a dependency the core forces on you.
Or Skip It Entirely
Every method maps to a documented HTTP endpoint. Nothing is reachable through the package that is not reachable without it.
The REST surface is the same one the SDK is built on, documented per endpoint.
Freedom That Survives Your Growth
Not a slogan, an architectural property. When the only coupling between your app and the platform is a thin HTTP client, the ability to redesign, re-platform or re-frame stays yours.
A Plain ES Module
No proprietary templating language to learn, or to get stuck in.
Any Framework
Next.js, Remix, Astro, SvelteKit, Vue or vanilla JavaScript.
Both Sides, One Import
Server-side and client-side rendering out of the same package.
Raw HTTP, If You Prefer
Every SDK call maps to a documented REST endpoint.
No Required Runtime
Optional React helpers you opt into, and nothing you have to host.
Re-Frame Without Re-Platforming
Change your framework without changing your backend, on your own schedule.
Build It Your Way.
Bring the framework you already like. We are the backend, and the frontend stays entirely yours.