Build Shopify appswith real workflows.

Build custom Shopify apps from typed flows, reusable providers, observable runs, retries, logs and an embedded admin UI.

OpenShop handles

Build Shopify integrations from real app primitives.Flows, providers, crons, webhooks, functions and run logs are first-class code.

The framework owns the repeatable pieces.

OpenShop gives agencies, freelancers and ecommerce teams a code-first base for Shopify integrations.

Checkpointed flows

Write Shopify jobs as typed flows with named steps that can resume after failure.

Provider contracts

Define external connectors once, including typed config fields for the admin UI.

Crons, webhooks, functions

Schedule flows, handle Shopify webhooks and register Shopify Functions from config.

Run visibility

Inspect runs, logs, provider status and retries from the embedded admin.

Real OpenShop features, shown in code

These examples come from the OpenShop demo app and README: sync flows, provider config, crons, webhooks, functions, logs, tests and MCP tools.

1export const syncOrders = app.defineFlow({
2 name: 'syncOrders',
3 input: type({ limit: 'number.integer > 0' }),
4 async run({ input, shopify, connectors, step, logger }) {
5 const orders = await step('fetch-orders', async () => {
6 logger.info({ limit: input.limit }, 'Fetching latest orders from Shopify...')
7 return shopify.graphql(`#graphql query GetRecentOrders($first: Int!) { ... }`)
8 })
9 await step('send-to-warehouse', async () => {
10 await connectors.warehouse.push(orders)
11 })
12 },
13})
i

OpenShop flows are typed jobs with named checkpointed steps. If a run fails mid-way, retries resume from the failed step.

OpenShop

Less app scaffolding. More integration logic.

Source-available, code-first, and built for teams that need control over their Shopify apps.

From flow to admin UI
One codebase for providers, jobs, webhooks and admin screens.
built in
Define flow steps01
Add provider config02
Schedule crons03
Handle webhooks04
Inspect run logs05
npx openshop init

Start from the CLI.

Initialize a new OpenShop app, then define flows, providers, webhooks and scheduled jobs in code.

Build the app your client actually needs.

Start with flows, providers, webhooks and run visibility, not app scaffolding.