Build your first app
Create a new OpenShop project, run it locally, and verify the generated app works.
OpenShop is a Shopify integration framework for building apps that need background jobs, provider credentials, scheduled work, app proxy endpoints, Shopify Admin GraphQL calls, and an embedded admin UI.
Use OpenShop when you want the application code to own the integration logic while the framework handles the repetitive operational surface: OAuth installs, stored shop access, provider configuration, flow runs, step checkpoints, logs, migrations, and workers.
An OpenShop app usually contains:
Build your first app
Create a new OpenShop project, run it locally, and verify the generated app works.
Define a provider
Add a typed connector with config fields, validation, and a health check.
Define a flow
Create a checkpointed background job that calls Shopify and a provider.
Deploy to production
Build the app, apply committed migrations, and run web and worker processes.
import { defineOpenShop, defineProvider } from 'openshop'
const warehouse = defineProvider({ name: 'warehouse', ui: { fields: { apiUrl: { type: 'text', label: 'API URL' }, apiKey: { type: 'password', label: 'API key' }, }, }, methods: { async push(config, rows: unknown[]) { await fetch(`${config.apiUrl}/orders`, { method: 'POST', headers: { Authorization: `Bearer ${config.apiKey}` }, body: JSON.stringify(rows), }) }, },})
const app = defineOpenShop({ providers: { warehouse },})
const syncOrders = app.defineFlow({ name: 'syncOrders', async run({ step, connectors }) { const orders = await step('fetch-orders', async () => []) await step('push-orders', async () => connectors.warehouse.push(orders)) },})
export default app.defineConfig({ flows: { syncOrders }, crons: [{ schedule: '*/5 * * * *', flow: 'syncOrders', shops: 'all' }],})Tutorials teach a complete first success path. Guides solve one task. Reference pages list exact APIs, options, defaults, constraints, and failure modes.