Skip to content
Guide

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.

Code example
Shell
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-app

A 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

Code example
Shell
git -C packages/workshop rev-parse --show-toplevel
task artisan -- nexia-apps:doctor-package-app workshop

The 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:

ValueWorkshopMeaning
app_keyworkshopStable route, permission and Resource namespace; lower kebab-case
app_table_prefixwspApp-owned table prefix; lower snake_case
app_familyotherLauncher grouping, not a dependency or permission boundary
Display nameWorkshopUser-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 pathStart here to change
composer.jsonIdentity, SDK requirement and Core compatibility
src/WorkshopAppManifest.phpContributions, tenant migrations and Overview
src/WorkshopServiceProvider.phpPackage registration
resources/js/index.tsFrontend registration
resources/lang/{en,ko,zh}.jsonApp copy
docs/README.md, docs/DOMAIN-MODEL.md, docs/PAGES.mdBusiness 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.

Source of truth: docs/developers/content/en/building-apps/create-an-app.md