Skip to content
Reference

Nexia CLI

Commands, step-by-step input, options, folder scope, authentication, automation and recovery.

Nexia CLI

Use create for projects and Apps, and make for code inside an App. Supplied options skip their questions; missing settings are requested step by step. This is a breaking command change without compatibility aliases. Platform authentication scope, generator data/translation rules, database operations and submission semantics remain unchanged. SSO and profiles are not provided.

Getting started

Requires Node.js 22.12+, npm 11.x, PHP 8.4+ and Composer.

Code example
Shell
npm install -g @nexia/cli@alpha
nexia setup --devtools
nexia create project my-project
cd my-project
nexia create app people
cd people
composer install --no-scripts
npm install
nexia make resource Note
nexia dev

To join an existing project, run nexia connect <project-id> in an empty project folder and approve in the browser. Clone the required Apps as direct child folders, install their dependencies, then run dev. The project folder is distinct from each App repository. Existing AGENTS.md files are preserved.

All commands

Prefix every command below with nexia.

CommandPurpose
setupPrepare environment and generators
create [project|app] [directory]Choose and create a project or App
connect [project-id]Authenticate and bind the current project folder
login [project-id]Authenticate again without changing folder bindings
logoutRevoke authentication; retain bindings and data
make [resource|page] [name]Choose generated code and its name
devWatch and develop the entire project
checkInspect App source
statusInspect authentication, project, folder and sandbox
db migrateRequest an App sandbox migration
db seed [key]Run this App's declared development data
db statusInspect the App database operation
submitSubmit an existing Git version tag for review
submit status [id]Inspect a submission
submit cancel [id]Cancel a cancellable submission
submit retry [id]Retry a retryable submission
help [command]Show command help
--versionShow the installed CLI version

Plain nexia displays help. nexia create, nexia make and nexia db begin with task selection. Choose by number or value.

Questions and confirmation

Explicit options are validated and never asked again. Missing settings show descriptions and defaults. Invalid answers repeat that question. Disabling navigation skips menu group, icon and order questions. Additional language labels are requested only when that language is selected.

App, resource and page creation end with a summary of settings and destination, followed by create, edit a setting, or cancel. Ctrl+C or EOF cancels. Generation never runs before confirmation. The existing generator preflight runs first. Resource generation skips existing files and registrations; page generation rejects collisions. Existing source is not overwritten. An OS write failure may still require inspecting changes already reported by the generator.

Code example
Shell
nexia create app people --vendor acme --family people
nexia make resource LeaveRequest --label-ko '휴가 신청'
nexia make page Summary --label-ko '요약' --no-record --no-navigation
nexia help make resource

App generation

Questions: folder → code name → package owner → App key → display name → family → table prefix → prerequisites → confirmation.

OptionMeaning and default
--namePHP code name; suggested from the folder name
--vendorComposer/npm package owner; required
--keyStable App identity; suggested from the code name
--display-nameDisplay name; defaults to the code name
--familyNavigation family; required
--table-prefixDatabase table prefix; suggested from the App key
--prerequisiteRequired App key; repeatable; none by default

--vendor acme and --key people produce the packages acme/people and @acme/people. Choose stable identifiers before registration. Creating an App does not register or install it. Existing destination folders are rejected even during dry-run.

Resource generation

Questions: App → code name → Korean display/list labels → optional Chinese labels → record ownership → menu visibility → menu settings → confirmation.

OptionMeaning and default
--label-koAuthored Korean label; required
--label-ko-pluralKorean list label; defaults to the singular label
--label-zhChinese label; omitted labels retain English fallback
--label-zh-pluralChinese list label; defaults to the singular label
--record-ownerlegal_entity by default, or tenant
--navigation / --no-navigationMenu visibility; shown by default
--navigation-groupoperations by default
--navigation-subgroupOptional menu subgroup; none by default
--iconbox by default
--sortauto keeps the generator's next position; accepts a number

Ownership is distinct from permission. Per-legal-entity ownership does not grant access. English labels derive from code names; omitted Chinese labels retain the existing fallback. Translation generation rules are unchanged; generic --label locale=value is not provided.

Page generation

Questions: App → code name → Korean label → include individual record read/edit screens → menu visibility/group/order → confirmation.

Options are --label-ko, --record / --no-record, --navigation / --no-navigation, --navigation-group and --sort. Record screens and navigation default to enabled, group to operations, and order to 100. A page creates no model, migration or Resource. Implement its business query before use.

Menu groups are insights, management, operations, master-data and settings. Menu detail options cannot accompany --no-navigation. Duplicate options and contradictory booleans are errors. Field/relationship designers and force-overwrite are not provided.

Folder and App selection

Commands also work in App subdirectories by finding the parent App/project. Explicit --app <folder-or-key> wins; otherwise the current or only App is selected. Multiple project Apps trigger a selection question.

CommandProject rootInside an App
create appCreate a direct childCreate a sibling in its project
make, db, submitSelect an AppCurrent App
checkAll AppsCurrent App
devEntire projectEntire project
connectAllowedInstructs you to use the project root

dev --app people develops one App. The default port is 4310; override with --port. Use --container for container preview access. Project Apps share one port; new Apps join automatically. Duplicate identities and symlink folders are not run.

dev handles registration, sandbox preparation, source synchronization and frontend watching. Source limits are 2000 files, 2 MiB per file and 16 MiB total; secrets, dependencies and symlinks are excluded. Sandbox retention is 100 revisions/512 MiB. Data is never automatically reset. Ctrl+C stops local watching. Remote runtime management stays in Developers; an existing writer lease or pending preparation may prevent a new development writer.

Authentication

login uses the current folder's project or asks for a project ID. Browser approval remains project-scoped, not account-wide. connect authenticates and binds the folder; create project also includes approval. --no-browser prints the approval URL. logout retains folder bindings and data. status reports mismatched authentication and folder scope; Apps are never silently moved between projects.

The official platform is https://developers.nexia.to. Platform developers can set NEXIA_ENDPOINT for login, connect and create project. Re-authentication for an already bound project prefers its saved endpoint. Endpoint changes clear old authentication. Never share or commit .nexia/ or the global CLI credential file.

Environment setup

setup --devtools installs/updates generators in the CLI-owned directory, without changing global Composer. setup asks whether to also install/upgrade Homebrew PHP and Composer on macOS and confirms the plan. Existing runtime versions may change; this redesign does not alter upgrade policy. On Linux/Windows install prerequisites yourself, then use --devtools. --dry-run performs no installation; shell startup files are not automatically edited.

Database and submission

Database commands target only the registered App's active sandbox. db seed selects its declared fixtures, not those of other installed Apps. queued is not completion: inspect db status. Stop dev first if it owns the writer lease. Retry a lost response with the same printed --request-id; review-required operations need operator inspection.

Commit and push source and the intended version tag with Git, then run check and submit --tag v1.0.0. If repository connection is missing, interactive submission guides you to Developers approval. Automated callers must connect it first. The CLI does not commit, tag or push. Submission requests review, not deployment or installation. Use the returned ID to inspect status; cancellation/retry follow server state and authorization. New source requires a new tag.

Automation and recovery

OptionMeaning
--no-interactiveNo prompts; required missing values or ambiguous targets fail
--yesAccept final confirmation; does not supply values, permission or browser approval
--dry-runShow the plan for installation/generation commands
--jsonStructured status/DB/submission output; no prompts
--request-idUUID for recovering the same DB/submission request

Non-TTY execution does not prompt. Optional values use documented defaults. Dry-run skips final confirmation because it performs no changes.

Code example
Shell
nexia make resource Note --app people --label-ko '메모' --no-interactive --yes
nexia submit --app people --tag v1.0.0 --no-interactive --yes --json
nexia submit status <submission-id> --json

JSON mode writes one result or error.code/error.message to stdout; diagnostics go to stderr. Exit codes are 0 success/acceptance, 1 operation failure, 2 input error, 130 cancellation. Zero does not establish asynchronous job completion.

Recover expired authentication with login from the project. After a lost project-creation response, retry the same folder/name to resume pending approval without creating a different project. Fix source/build errors and restart dev; do not reset data as a repair shortcut.

Migrating old commands

Replace init with create app, create-project with create project, link-project with connect, make:resource/page with make resource/page, validate with check, and submissions with submit. Run in the intended folder or use --app instead of trailing App paths. Replace --without-navigation/record with --no-navigation/record.

Manual registration, sync, runtime, repository and doctor commands, browser templates, DB reset/references, cross-App fixtures, resource catalogs, signature generators, Filament options, Runtime image inspection and local MCP are excluded from the public CLI. Existing platform/SDK/internal implementations are not deleted. Manual one-shot snapshots and MCP through nexia are no longer provided; synchronization remains in dev. Do not assume every excluded command has an equivalent Console action. Existing PHP devtools signature/Filament generators remain available to their callers.

CLI developers can point NEXIA_DEVTOOLS_PATH at an independently installed generator with its Composer dependencies prepared. The executable cannot reside inside the App being generated/checked. Support requests should include sanitized reproduction and versions, never credentials or customer data: Developer Support.

Source of truth: docs/developers/content/en/getting-started/cli.md