portside-labs/laravel-shopify
Laravel Shopify by Portside Labs is a lightweight integration for building Shopify apps with Laravel. It streamlines API client setup, OAuth authentication, webhook routing, and configuration so you can connect your app to Shopify stores with less boilerplate and focus on business logic.
Architecture fit
shopify:install, shopify:dev, shopify:deploy, shopify:doctor) plus a composer create-project skeleton, and treats shopify.app.toml as a first-class, environment-scoped artifact.npm, and a tunnel are available wherever shopify:dev runs — that is a real stack dependency for a PHP package.SHOPIFY_APP_CONFIG, shopify.app.dev.toml in local, shopify.app.toml for production, named configs always respected) is a coherent, conventional model that mirrors Laravel's own env-file conventions.Integration feasibility
shopify.app.toml to shopify.app.dev.toml (or re-run shopify:install). Anything with bespoke config management (custom scripts, Dev Dashboard-authored config, monorepo CI) will need reconciliation.shopify:deploy is the most valuable addition for enterprise adoption: it names the configuration explicitly, refuses unlinked or tunnel/localhost/*.test/example.com URLs in production, runs shopify:doctor, and supports --no-interaction for CI (auto-adding --allow-updates). That is the shape of a deployable, auditable release step.Technical risk
shopify app dev "rewrites the configuration from the Dev Dashboard and drops the kit's webhooks and settings." The package's countermeasure — re-subscribing to default webhooks "whenever the configuration has lost them" — is a compensating control against undocumented upstream behavior. Every Shopify CLI release can silently change this contract, and the failure mode is lost webhooks, which is invisible until an uninstall or compliance event is missed.app/uninstalled, app/scopes_update, and the three compliance topics keeps an app review-compliant, but it means two writers (kit and Dev Dashboard) to one configuration. Unclear who wins, and whether removed webhooks get resurrected.npm install on every shopify:dev (medium). Slow, network-dependent, and non-deterministic unless a lockfile is committed and npm ci semantics are enforced. Repeatedly cited developer-friction source.localhost/.test/example.com are reasonable but bypassable by a custom domain pointing at a tunnel.Key questions
shopify:dev intended for local only, or is it sanctioned for shared/staging environments?Stack fit
shopify:dev or shopify:deploy. CI needs the CLI, Node, and Shopify auth credentials; it does not need PHP to deploy config, but does need it to run Artisan..env carries APP_URL and SHOPIFY_APP_CONFIG; shopify.app.dev.toml is gitignored so per-developer dev settings don't leak into the repo, while shopify.app.toml remains the committed production artifact.Migration path
shopify.app.toml → shopify.app.dev.toml, or run php artisan shopify:install once to link the development app to it. Diff the resulting TOML against the committed production file to confirm webhooks and settings survived.shopify.app.toml for tunnel/localhost URLs before the first shopify:deploy, since the command refuses them.Compatibility
--config=staging, --production, Artisan --env=production reading .env.production) map cleanly onto a typical dev → staging → prod promotion model. Confirm the mapping between Laravel environments and Shopify configurations is one-to-one in your setup; the release notes imply --env governs the env file, not the Shopify config.shopify app deploy in CI can swap in shopify:deploy incrementally — it passes through --message, --app-version, --no-release, --allow-updates, --allow-deletes, and --skip-checks.Sequencing
install → dev → deploy end-to-end.shopify:deploy --no-interaction behind a manual approval gate; keep --skip-checks out of production paths.shopify:doctor output a required artifact in PRs touching Shopify config.Maintenance
Support
.env value) should absorb most of it.shopify:doctor no longer fails on missing billing settings unless a route uses the subscribed middleware. That reduces false-alarm noise but shifts billing misconfiguration discovery later — into runtime. Document it as a known gap.Scaling
shopify.app.dev.toml, and named configurations cover staging. The design assumes one dev store per developer or a shared dev store — clarify which, since concurrent webhook re-subscription against a shared app is a plausible collision.npm install per shopify:dev invocation becomes a growing tax with team size and dependency count; consider npm ci or a skipped-install flag.Failure modes
shopify:deploy refusing to run on an unlinked config or a non-production URL — correct, but will surprise teams mid-incident. Ensure an escape hatch is documented.--no-interaction implicitly adding --allow-updates means CI can silently accept upstream-driven config changes; that is convenient and worth an explicit policy decision.APP_URL and redirect URIs in a running environment.Ramp-up
How can I help you explore Laravel packages today?