Create an App Package
Generate Workshop and establish its independent package repository.
Create an App Package
Create Workshop, an installable App with its own repository. Complete Quickstart, then run from the Core root with no existing packages/workshop directory. Review the preview before running the second command.
The host setup includes Core-root auth.json with your own GitHub token for private dependencies. If you entered this guide directly, complete the authentication step in Quickstart before preparing the host.
task artisan -- nexia-apps:make-package-app Workshop --family=other --key=workshop --table-prefix=wsp --icon=box --sort=990 --dry-run
task artisan -- nexia-apps:make-package-app Workshop --family=other --key=workshop --table-prefix=wsp --icon=box --sort=990
git -C packages/workshop init -b feat/workshop-appA new App key must be unused by local packages and Composer-installed Apps. Generation fails before writing files if the key or packages/<app-key> path is occupied; choose a new key rather than rerunning creation over an existing App.
Verify
git -C packages/workshop rev-parse --show-toplevel
task artisan -- nexia-apps:doctor-package-app workshopThe Git root must resolve to Workshop. Before activation, a runtime-registration warning is expected. Generating an App map alone does not install a new package in Composer.
You now have package metadata, a Manifest, a service provider, an Overview screen, routes, locale catalogs, tests and App-local documentation. The generator has not activated or installed the App and creates no business records.
Continue with Create a Resource to add Note and open your App in a tenant. After generation, paths such as src/Models/Note.php in these guides are relative to the App root; task commands run from the Core root.
Choose a production identity
Workshop is a practice identity. For a real capability, settle these values before generating:
| Value | Workshop | Meaning |
|---|---|---|
app_key | workshop | Stable route, permission and Resource namespace; lower kebab-case |
app_table_prefix | wsp | App-owned table prefix; lower snake_case |
app_family | other | Launcher grouping, not a dependency or permission boundary |
| Display name | Workshop | User-facing text; use --display-name to customize |
The reserved keys are core, host, platform, shell, tenant, process, and apps. Changing a key after release needs coordinated contract changes; changing a table prefix needs a migration. Family labels and ordering belong to the host.
Create an App when it owns a distinct business capability and should be installed and released independently. A new screen or another record in an existing domain usually belongs in that App. A cross-App reference is supported; a shared transaction maintaining one business invariant is a reason to revisit ownership.
A repeatable --prerequisite=<app-key> sets lifecycle order only. It grants no data access. Choose the data path in Choose a cross-App integration.
Find the generated entry points
| App-relative path | Start here to change |
|---|---|
composer.json | Identity, SDK requirement and Core compatibility |
src/WorkshopAppManifest.php | Contributions, tenant migrations and Overview |
src/WorkshopServiceProvider.php | Package registration |
resources/js/index.ts | Frontend registration |
resources/lang/{en,ko,zh}.json | App copy |
docs/README.md, docs/DOMAIN-MODEL.md, docs/PAGES.md | Business boundary, records and intended destinations |
Keep generator markers in routes and the frontend entry: later Resource generation uses them. A Resource declaration and an App Menu destination are separate choices; record intentional menu placement in docs/PAGES.md.
See App manifest for the full declaration contract and Artisan commands for generator options.