deploteka
v0.3.3
Published
Official DeploTeka CLI — connect a Shopify organization and make an existing Shopify app (Remix, React Router v7 or Express) ready for dedicated per-store apps.
Readme
DeploTeka CLI
Prepare an existing Shopify application — Remix, React Router v7, Express, Laravel, Rails, Python, or no framework at all — for dedicated per-store Shopify apps:
npx deploteka onboard . --applyThe command detects the target's Shopify app framework FIRST and states it in its
first output line, then installs the matching runtime, updates Shopify
authentication, adds the local credential store and protected fleet routes,
creates the Prisma migration, and runs the application's own typecheck or
build. TypeScript and JavaScript apps are both handled — .ts/.tsx and
.js/.jsx alike.
Automated ("Tier A") stacks and the runtime each one gets:
| Detected | Runtime installed |
|---|---|
| @shopify/shopify-app-react-router v1/v2 | deploteka-app-fleet (/react-router entry) |
| @shopify/shopify-app-remix v4 | deploteka-app-fleet |
| @shopify/shopify-app-remix v2/v3 (legacy) | deploteka-app-fleet-legacy |
Old framework versions are captured as they are — upgrading is offered, never required.
Adapter packages ("Tier B")
Two stacks are captured by a first-party adapter package rather than by a codemod, because neither has a fixed template layout to rewrite safely:
| Detected | Adapter |
|---|---|
| @shopify/shopify-app-express (majors 4–8) | deploteka-app-fleet-express (npm) |
| kyon147/laravel-shopify (17.3–27), osiset/laravel-shopify 17 | deploteka/laravel-fleet (Composer) |
The CLI detects the stack — reading composer.json as well as package.json — prints
a precise numbered integration recipe, and exits 4 without touching a single file.
Budget 10–30 minutes:
https://deploteka.com/guides/express-fleet-adapter ·
https://deploteka.com/guides/laravel-fleet-adapter
Guided stacks ("Tier C")
Four more stacks are recognised by name and served by a guide written for them, plus a starter-file generator:
| Detected from | Stack | Guide |
|---|---|---|
| Gemfile / Gemfile.lock → shopify_app | Rails | /guides/rails-fleet-contract |
| requirements.txt / pyproject.toml / Pipfile → ShopifyAPI | Python (Flask, FastAPI) | /guides/python-fleet-contract |
| package.json → @shopify/shopify-api with no app framework | raw Node / webhook-only | /guides/webhook-only-fleet-contract |
| shopify.app.toml + extensions/, no server dependency | extension-only | /guides/extension-only-shim |
npx deploteka onboard . --scaffoldgenerates the contract's starter files into <target>/deploteka-fleet/ — the two
endpoints, the credential replica and the per-shop credential lookup, in the target's
own language, each marked with the TODO(deploteka) lines only you can finish. It
writes nowhere else, never overwrites an existing file, is safe to re-run, and
exits 0. Without --scaffold these stacks print their guide and exit 3.
Everything else
A stack the detector genuinely cannot identify never dead-ends either: the CLI prints the two-path guide — the universal manual wiring guide at https://deploteka.com/guides/fleet-contract-any-stack (works on any stack/version, ~80 LOC), and the option to upgrade to a Tier-A stack for the automated codemod — and exits 3 without writing anything.
Run a dry preview first by omitting --apply:
npx deploteka onboard .To connect a Shopify Partner organization through the browser-approved fallback:
npx deploteka connectNode.js 18 or newer is required. The onboarding codemod targets the standard Shopify app template structure of each supported stack and refuses unsafe partial rewrites.
Documentation: https://deploteka.com
