Buddy Command Reference
On this page 307
This reference is generated from Buddy's runtime command registry and currently contains 305 commands. Run bun run docs:buddy after changing the registry; CI rejects stale output.
Command groups
| Group | Commands |
|---|---|
ai | 1 |
auth | 4 |
build | 15 |
cloud | 7 |
cms | 2 |
coming-soon | 1 |
commerce | 2 |
config | 1 |
configure | 1 |
core | 1 |
dashboard | 2 |
db | 3 |
deploy | 1 |
desktop | 6 |
dev | 8 |
dns | 3 |
docs | 6 |
domains | 3 |
email | 7 |
env | 7 |
extension | 13 |
format | 1 |
forms | 2 |
general | 49 |
generate | 16 |
inspire | 1 |
key | 1 |
link | 1 |
lint | 1 |
mail | 31 |
make | 18 |
marketing | 2 |
migrate | 6 |
monitoring | 2 |
package | 1 |
phone | 4 |
ports | 2 |
projects | 1 |
publish | 5 |
queue | 21 |
realtime | 2 |
route | 1 |
scaffold | 1 |
schedule | 6 |
search | 2 |
search-engine | 2 |
seed | 1 |
serve | 1 |
setup | 3 |
simulator | 2 |
sms | 6 |
stack | 3 |
stripe | 1 |
test | 4 |
types | 2 |
unlink | 1 |
unpublish | 1 |
upgrade | 5 |
user | 2 |
Commands
about
Display diagnostic information about Stacks
- Usage:
$ buddy about - Namespace: none
- Aliases: none
- Arguments: none
add
Pull a registered stack and merge its project files into this Stacks application
- Usage:
$ buddy add <stack> - Namespace: none
- Aliases: none
- Arguments:
<stack>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite existing files | boolean, optional | false |
--dry-run | Show which files would be installed without changing the project | boolean, optional | false |
--conflict | Resolve existing files with skip, overwrite, or backup | value, required | "skip" |
-p, --project | Target a specific Stacks project | value, required | - |
--verbose | Show every file copied or skipped | boolean, optional | false |
Examples:
buddy add calendar
buddy add table --dry-run
buddy add calendar --conflict backup
ai:context
Generate compact deterministic project context for coding models
- Usage:
$ buddy ai:context - Namespace:
ai - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-J, --json | Emit the versioned machine-readable context contract | boolean, optional | false |
-o, --output | Write output to a file instead of stdout | value, optional | - |
--max-chars | Maximum characters in the prompt context payload | value, optional | 4000 |
--model | Model family used for the heuristic token estimate | value, optional | "gpt-4o" |
Examples:
buddy ai:context
buddy ai:context --json
buddy ai:context --json --output storage/framework/runtime/ai-context.json
auth:client
Create a new OAuth client
- Usage:
$ buddy auth:client - Namespace:
auth - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | Client name | value, optional | "OAuth Client" |
-r, --redirect | Redirect URI | value, optional | "http://localhost" |
--personal | Create a personal access client | boolean, optional | false |
--password | Create a password grant client | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
auth:prune
Prune expired and revoked tokens
- Usage:
$ buddy auth:prune - Namespace:
auth - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--expired | Prune expired tokens (default: true) | boolean, optional | true |
--revoked | Prune revoked tokens (default: true) | boolean, optional | true |
-d, --days | Prune revoked tokens older than N days | value, optional | 7 |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
auth:setup
Set up authentication (migrations + personal access client)
- Usage:
$ buddy auth:setup - Namespace:
auth - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
auth:token
Create a personal access client token
- Usage:
$ buddy auth:token - Namespace:
auth - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build
Build any of your libraries (packages) for production use
- Usage:
$ buddy build [type] - Namespace: none
- Aliases: none
- Arguments:
[type]
| Option | Description | Contract | Default |
|---|---|---|---|
-c, --components | Build your component library | boolean, optional | - |
-w, --web-components | Build your framework agnostic web component library | boolean, optional | - |
-e, --elements | An alias to the -w flag | boolean, optional | - |
-f, --functions | Build your function library | boolean, optional | - |
-k, --desktop | Build the Desktop Application | boolean, optional | - |
-m, --mobile | Build the native iOS and Android applications | boolean, optional | - |
--android | Build the native Android application | boolean, optional | - |
--ios | Build the native iOS application | boolean, optional | - |
-p, --views | Build your frontend | boolean, optional | - |
--pages | Build your frontend | boolean, optional | - |
-d, --docs | Build your documentation | boolean, optional | - |
-b, --buddy | Build the Buddy binary | boolean, optional | false |
-s, --stacks | Build Stacks framework | boolean, optional | false |
--project | Target a specific project | value, optional | false |
--server | Build the Stacks cloud server (Docker image) | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:android
Build the native Android application
- Usage:
$ buddy build:android - Namespace:
build - Aliases:
prod:android - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:cli
Automagically build the CLI
- Usage:
$ buddy build:cli - Namespace:
build - Aliases:
prod:cli - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-b, --buddy | Build the Buddy binary | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:components
Automagically build component libraries for production use & npm/CDN distribution
- Usage:
$ buddy build:components - Namespace:
build - Aliases:
prod:components - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-c, --components | Build your component library | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:core
Automagically build the Stacks core.
- Usage:
$ buddy build:core - Namespace:
build - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:desktop
Build the Desktop Application
- Usage:
$ buddy build:desktop - Namespace:
build - Aliases:
prod:desktop - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:dmg
Package the desktop build as a macOS .app inside a .dmg
- Usage:
$ buddy build:dmg - Namespace:
build - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:docs
Automagically build your documentation site.
- Usage:
$ buddy build:docs - Namespace:
build - Aliases:
prod:docs,build:documentation,prod:documentation - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-d, --docs | Build your documentation | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:frontend
Build your frontend
- Usage:
$ buddy build:frontend - Namespace:
build - Aliases:
build:pages,build:views,prod:frontend - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:frontend-static
Build the prerendered marketing/public static site (storage/framework/frontend-dist)
- Usage:
$ buddy build:frontend-static - Namespace:
build - Aliases:
build:public,prod:frontend-static - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:functions
Automagically build function library for npm/CDN distribution
- Usage:
$ buddy build:functions - Namespace:
build - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --functions | Build your function library | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:ios
Build the native iOS application
- Usage:
$ buddy build:ios - Namespace:
build - Aliases:
prod:ios - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:mobile
Build the native iOS and Android applications
- Usage:
$ buddy build:mobile - Namespace:
build - Aliases:
prod:mobile - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:server
Build the Stacks cloud server (Docker image)
- Usage:
$ buddy build:server - Namespace:
build - Aliases:
prod:server,build:docker - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:stacks
Build the Stacks framework.
- Usage:
$ buddy build:stacks - Namespace:
build - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-s, --stacks | Build Stacks framework | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
build:web-components
Automagically build Web Component library for npm/CDN distribution
- Usage:
$ buddy build:web-components - Namespace:
build - Aliases:
build:wc,prod:web-components,prod:wc - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-w, --web-components | Build your framework agnostic web component library | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cd
Print the absolute path of a Stacks project by name
- Usage:
$ buddy cd [name] - Namespace: none
- Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
--eval | Emit cd "path" instead of just the path - pair with eval "$(buddy cd <name> --eval)" for real shell-cd | boolean, optional | false |
--root | Search root for the project scan (overrides STACKS_PROJECTS_ROOT and the home-dir default) | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
changelog
Create a CHANGELOG.md file
- Usage:
$ buddy changelog - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-q, --quiet | Minimal output | boolean, optional | false |
-d, --dry-run | Do not write the file, just output the changes | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--from | Start git revision for generated changelog | value, required | - |
--to | End git revision for generated changelog | value, required | - |
--version | Version heading to use for the generated changelog entry | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
clean
Removes all node_modules & lock files
- Usage:
$ buddy clean - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-f, --force | Skip the confirmation prompt (required in CI/non-interactive shells) | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud
Interact with the Stacks Cloud
- Usage:
$ buddy cloud - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--ssh | SSH into the Stacks Cloud | boolean, optional | false |
--connect | SSH into the Stacks Cloud | boolean, optional | false |
--invalidate-cache | Invalidate the CloudFront cache | boolean, optional | false |
--paths | The paths to invalidate | value, optional | - |
--diff | Show the diff of the current, undeployed cloud changes | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:add
Add a resource to the Stacks Cloud
- Usage:
$ buddy cloud:add - Namespace:
cloud - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--jump-box | Remove the jump-box | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:cleanup
Remove all resources that were retained during the cloud deletion
- Usage:
$ buddy cloud:cleanup - Namespace:
cloud - Aliases:
cloud:clean-up - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:dashboard
Run the local Stacks Cloud management cockpit (servers, sites, deploys)
- Usage:
$ buddy cloud:dashboard - Namespace:
cloud - Aliases:
cloud:cockpit - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Host to bind the dashboard to | value, optional | "127.0.0.1" |
--port | Port to bind the dashboard to | value, optional | "7676" |
--env | Environment to manage | value, optional | - |
--verbose | Enable verbose output | boolean, optional | false |
cloud:diff
Show the diff of the current, undeployed cloud changes
- Usage:
$ buddy cloud:diff - Namespace:
cloud - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:invalidate-cache
Invalidate the CloudFront cache
- Usage:
$ buddy cloud:invalidate-cache - Namespace:
cloud - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--paths | The paths to invalidate | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:optimize-cost
Remove certain resources that may be re-applied at a later time
- Usage:
$ buddy cloud:optimize-cost - Namespace:
cloud - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--jump-box | Remove the jump-box | boolean, optional | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cloud:remove
Remove the Stacks Cloud. In case it fails, try again
- Usage:
$ buddy cloud:remove - Namespace:
cloud - Aliases:
cloud:destroy,cloud:rm,undeploy - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--jump-box | Remove the jump-box | boolean, optional | false |
--force | Force deletion of stack in bad state | boolean, optional | false |
--yes | Skip confirmation prompts | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
cms:install
Activate the cms feature bundle. Post/Page/Author/Comment/Tag models + content edit dashboards.
- Usage:
$ buddy cms:install - Namespace:
cms - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing cms files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
cms:uninstall
Deactivate the cms feature bundle.
- Usage:
$ buddy cms:uninstall - Namespace:
cms - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the cms scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
coming-soon
Put the application into coming soon mode
- Usage:
$ buddy coming-soon - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--message | The message to display | value, optional | false |
--secret | The secret phrase to bypass coming soon mode | value, optional | false |
--allow | IP addresses allowed to access the application | value, optional | false |
--status | The HTTP status code to return | value, optional | "200" |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy coming-soon
buddy coming-soon --secret=trailhead
buddy coming-soon --message="Opening soon"
coming-soon:status
Check if the application is in coming soon mode
- Usage:
$ buddy coming-soon:status - Namespace:
coming-soon - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
commerce:install
Activate the commerce feature bundle. Order/Cart/Product/Customer/Coupon/GiftCard/Shipping + storefront API.
- Usage:
$ buddy commerce:install - Namespace:
commerce - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing commerce files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
commerce:uninstall
Deactivate the commerce feature bundle.
- Usage:
$ buddy commerce:uninstall - Namespace:
commerce - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the commerce scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
commit
Commit your staged changes
- Usage:
$ buddy commit - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
completion
Generate shell completion scripts
- Usage:
$ buddy completion [shell] - Namespace: none
- Aliases: none
- Arguments:
[shell]
| Option | Description | Contract | Default |
|---|---|---|---|
-s, --shell | Shell type (bash, zsh, fish) | value, optional | - |
Examples:
buddy completion bash
buddy completion zsh
buddy completion fish
buddy completion bash > /usr/local/etc/bash_completion.d/buddy
config:migrate
Apply config-shape codemods for the latest Stacks version
- Usage:
$ buddy config:migrate - Namespace:
config - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Preview changes without writing | boolean, optional | false |
--only | Run a single codemod by id | value, optional | "" |
configure
Configure options
- Usage:
$ buddy configure - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--aws | Configure the AWS connection | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
configure:aws
Configure the AWS connection
- Usage:
$ buddy configure:aws - Namespace:
configure - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--profile | The AWS profile to use | boolean, optional | "stacks" |
--verbose | Enable verbose output | boolean, optional | false |
--access-key-id | The AWS access key | boolean, optional | - |
--secret-access-key | The AWS secret access key | boolean, optional | - |
--region | The AWS region | boolean, optional | - |
--output | The AWS output format | boolean, optional | - |
--quiet | Suppress output | boolean, optional | - |
core:status
Report whether this project runs on a vendored storage/framework/core or on the published packages
- Usage:
$ buddy core:status - Namespace:
core - Aliases:
publish:core:status - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy core:status
dashboard:install
Activate the dashboard feature bundle. Admin SPA shell + Activity/Log/Request/Deployment/Notification dashboards.
- Usage:
$ buddy dashboard:install - Namespace:
dashboard - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing dashboard files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
dashboard:uninstall
Deactivate the dashboard feature bundle.
- Usage:
$ buddy dashboard:uninstall - Namespace:
dashboard - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the dashboard scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
db:backup
Dump the application database to a file
- Usage:
$ buddy db:backup - Namespace:
db - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--out | Where to write the dump (default: storage/backups/database) | value, optional | - |
--retain | How many dumps to keep | value, optional | "7" |
--before-migrations | Deploy mode: succeed quietly when there is no database yet | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy db:backup
buddy db:backup --out /var/backups/app --retain 30
db:backups
List the database dumps that have been taken
- Usage:
$ buddy db:backups - Namespace:
db - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--out | Where dumps are kept (default: storage/backups/database) | value, optional | - |
Examples:
buddy db:backups
db:restore
Restore the application database from a dump
- Usage:
$ buddy db:restore [file] - Namespace:
db - Aliases: none
- Arguments:
[file]
| Option | Description | Contract | Default |
|---|---|---|---|
--out | Where dumps are kept (default: storage/backups/database) | value, optional | - |
--force | Skip the confirmation prompt | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy db:restore
buddy db:restore 2026-08-13T09-00-00-000.sqlite.sqlite --force
deploy
Deploy your project
- Usage:
$ buddy deploy [env] - Namespace: none
- Aliases: none
- Arguments:
[env]
| Option | Description | Contract | Default |
|---|---|---|---|
--domain | Specify a domain to deploy to | value, required | - |
-p, --project | Target a specific project | value, optional | false |
--prod | Deploy to production | boolean, optional | false |
--dev | Deploy to development | boolean, optional | false |
--yes | Confirm all prompts by default | boolean, optional | false |
--site | Deploy only this one site to the existing server (multi-tenant surgical add) | value, required | - |
--staging | Deploy to staging | boolean, optional | false |
--docker | Also build an OCI image with pantry (native, no Docker daemon) and push it to the pantry registry | boolean, optional | false |
-J, --json | Emit a machine-readable deployment preview | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
deploy:rollback
Roll back a deployment to a preserved release
- Usage:
$ buddy deploy:rollback [site] - Namespace:
deploy - Aliases: none
- Arguments:
[site]
| Option | Description | Contract | Default |
|---|---|---|---|
--env | Environment to roll back | value, required | "production" |
--to | Preserved release id to activate | value, required | - |
--dry-run | Preview the rollback without changing the active release | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
desktop:apple:csr
Generate local private keys and CSRs for Mac App Store distribution certificates
- Usage:
$ buddy desktop:apple:csr - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--common-name | Certificate request common name | value, required | - |
--output | Directory for private keys and certificate requests | value, required | - |
desktop:apple:doctor
Validate Mac App Store tooling, credentials, certificates, and project metadata
- Usage:
$ buddy desktop:apple:doctor - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--app-name | Mac App Store display name | value, required | - |
--bundle-id | Reverse-DNS bundle identifier | value, required | - |
--team-id | Apple Developer team ID | value, required | - |
--app-signing-identity | Mac App Distribution signing identity | value, required | - |
--installer-signing-identity | Mac Installer Distribution signing identity | value, required | - |
--provisioning-profile | Mac App Store provisioning profile | value, required | - |
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | App Store Connect AuthKey .p8 file | value, required | - |
desktop:apple:init
Create a GitHub Actions caller for the reusable Stacks Mac App Store workflow
- Usage:
$ buddy desktop:apple:init - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Replace an existing workflow | boolean, optional | - |
desktop:apple:package
Build, sandbox, sign, and package a Mac App Store desktop app
- Usage:
$ buddy desktop:apple:package - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--app-name | Mac App Store display name | value, required | - |
--bundle-id | Reverse-DNS bundle identifier | value, required | - |
--team-id | Apple Developer team ID | value, required | - |
--app-version | Marketing version | value, required | - |
--build-number | Unique App Store build number | value, required | - |
--minimum-macos | Minimum supported macOS version | value, required | - |
--category | LSApplicationCategoryType value | value, required | - |
--app-signing-identity | Mac App Distribution signing identity | value, required | - |
--installer-signing-identity | Mac Installer Distribution signing identity | value, required | - |
--provisioning-profile | Mac App Store provisioning profile | value, required | - |
--icon | Optional .icns app icon | value, required | - |
--skip-build | Package existing storage/framework/desktop-dist artifacts | boolean, optional | - |
desktop:apple:provision
Plan or reconcile Apple Bundle ID, capabilities, certificates, and profile
- Usage:
$ buddy desktop:apple:provision - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--app-name | Mac App Store display name | value, required | - |
--bundle-id | Reverse-DNS bundle identifier | value, required | - |
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | App Store Connect AuthKey .p8 file | value, required | - |
--capabilities | Comma-separated Apple capability types | value, required | - |
--app-certificate-csr | CSR for a missing Mac App Distribution certificate | value, required | - |
--installer-certificate-csr | CSR for a missing Mac Installer Distribution certificate | value, required | - |
--profile-name | Provisioning profile name | value, required | - |
--output | Directory for the plan and downloaded Apple assets | value, required | - |
--plan | Report the idempotent Apple resource diff without mutating it | boolean, optional | - |
--apply | Apply the Apple resource diff without revoking existing certificates | boolean, optional | - |
desktop:apple:publish
Build and validate or upload a signed Mac App Store package
- Usage:
$ buddy desktop:apple:publish - Namespace:
desktop - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--app-name | Mac App Store display name | value, required | - |
--bundle-id | Reverse-DNS bundle identifier | value, required | - |
--team-id | Apple Developer team ID | value, required | - |
--app-version | Marketing version | value, required | - |
--build-number | Unique App Store build number | value, required | - |
--minimum-macos | Minimum supported macOS version | value, required | - |
--category | LSApplicationCategoryType value | value, required | - |
--app-signing-identity | Mac App Distribution signing identity | value, required | - |
--installer-signing-identity | Mac Installer Distribution signing identity | value, required | - |
--provisioning-profile | Mac App Store provisioning profile | value, required | - |
--icon | Optional .icns app icon | value, required | - |
--skip-build | Package existing storage/framework/desktop-dist artifacts | boolean, optional | - |
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | App Store Connect AuthKey .p8 file | value, required | - |
--validate-only | Validate with App Store Connect without uploading | boolean, optional | - |
--package-only | Create the signed package without contacting App Store Connect | boolean, optional | - |
dev
Start development server
- Usage:
$ buddy dev [server] - Namespace: none
- Aliases: none
- Arguments:
[server]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --frontend | Start the frontend development server | boolean, optional | - |
-a, --api | Start the local API development server | boolean, optional | - |
-c, --components | Start the Components development server | boolean, optional | - |
-d, --dashboard | Start the Dashboard development server | boolean, optional | - |
-k, --desktop | Start the Desktop App development server | boolean, optional | - |
-n, --native | Start the app in a native Craft window | boolean, optional | - |
-o, --docs | Start the Documentation development server | boolean, optional | - |
-s, --system-tray | Start the System Tray development server | boolean, optional | - |
-i, --interactive | Get asked which development server to start | boolean, optional | false |
-l, --with-localhost | Include the localhost URL in the output | boolean, optional | false |
--browser | Open the application in a browser instead of its configured native window | boolean, optional | false |
--site | Open the marketing site instead of the application | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:api
Start the local API development server
- Usage:
$ buddy dev:api - Namespace:
dev - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--no-watch-types | Skip the model/config type-regeneration watcher | boolean, optional, negated | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:components
Start the Components development server
- Usage:
$ buddy dev:components - Namespace:
dev - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:dashboard
Start the Dashboard development server
- Usage:
$ buddy dev:dashboard - Namespace:
dev - Aliases:
dev:admin - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:desktop
Start the Desktop App development server
- Usage:
$ buddy dev:desktop - Namespace:
dev - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:docs
Start the Documentation development server
- Usage:
$ buddy dev:docs - Namespace:
dev - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:frontend
Start the frontend development server
- Usage:
$ buddy dev:frontend - Namespace:
dev - Aliases:
dev:pages,dev:views - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--site | Open the marketing site instead of the application | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:native
Start the app in a native Craft window
- Usage:
$ buddy dev:native - Namespace:
dev - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dev:system-tray
Start the System Tray development server
- Usage:
$ buddy dev:system-tray - Namespace:
dev - Aliases:
dev:tray - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dns
Lists the DNS records for a domain
- Usage:
$ buddy dns [domain] - Namespace: none
- Aliases: none
- Arguments:
[domain]
| Option | Description | Contract | Default |
|---|---|---|---|
-q, --query | Host name or IP address to query | value, required | - |
-t, --type | Type of the DNS record being queried (A, MX, NS…) | value, required | "A" |
-n, --nameserver | Address of the nameserver to send packets to | value, required | - |
--class | Network class of the DNS record being queried (IN, CH, HS) | value, required | - |
-U, --udp | Use the DNS protocol over UDP | boolean, optional | - |
-T, --tcp | Use the DNS protocol over TCP | boolean, optional | - |
-S, --tls | Use the DNS-over-TLS protocol | boolean, optional | - |
-H, --https | Use the DNS-over-HTTPS protocol | boolean, optional | - |
-1, --short | Short mode: display nothing but the first result | boolean, optional | false |
-J, --json | Display the output as JSON | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
dns:diff
Show which config/dns.ts records are missing from the live zone
- Usage:
$ buddy dns:diff [domain] - Namespace:
dns - Aliases: none
- Arguments:
[domain]
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
dns:pull
Print a domain's live DNS records as a config/dns.ts block
- Usage:
$ buddy dns:pull [domain] - Namespace:
dns - Aliases: none
- Arguments:
[domain]
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
dns:sync
Additively sync config/dns.ts to the registrar (creates missing records; never deletes or overwrites)
- Usage:
$ buddy dns:sync [domain] - Namespace:
dns - Aliases: none
- Arguments:
[domain]
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Show the plan without writing any records | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
docs:artifacts
Regenerate the generated API artifacts (OpenAPI + types)
- Usage:
$ buddy docs:artifacts - Namespace:
docs - Aliases: none
- Arguments: none
docs:artifacts:check
Verify the generated API artifacts are current
- Usage:
$ buddy docs:artifacts:check - Namespace:
docs - Aliases: none
- Arguments: none
docs:buddy
Regenerate the buddy command reference doc
- Usage:
$ buddy docs:buddy - Namespace:
docs - Aliases: none
- Arguments: none
docs:buddy:check
Verify the buddy command reference doc is current
- Usage:
$ buddy docs:buddy:check - Namespace:
docs - Aliases: none
- Arguments: none
docs:links
Report internal documentation links
- Usage:
$ buddy docs:links - Namespace:
docs - Aliases: none
- Arguments: none
docs:links:check
Verify internal documentation links resolve
- Usage:
$ buddy docs:links:check - Namespace:
docs - Aliases: none
- Arguments: none
doctor
Run health checks on your Stacks installation
- Usage:
$ buddy doctor - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--no-fail | Print results but always exit 0 (CI ramp-up) | boolean, optional, negated | true |
domains:add
Add a domain to your cloud
- Usage:
$ buddy domains:add <domain> - Namespace:
domains - Aliases: none
- Arguments:
<domain>
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
domains:purchase
Purchase a domain
- Usage:
$ buddy domains:purchase <domain> - Namespace:
domains - Aliases: none
- Arguments:
<domain>
| Option | Description | Contract | Default |
|---|---|---|---|
--years | Number of years to purchase the domain for | value, required | 1 |
--privacy | Enable privacy protection | boolean, optional | true |
--auto-renew | Enable auto-renew | boolean, optional | true |
--first-name | Registrant first name | value, required | - |
--last-name | Registrant last name | value, required | - |
--organization | Registrant organization name | value, required | - |
--address-line1 | Registrant address line 1 | value, required | - |
--address-line2 | Registrant address line 2 | value, required | - |
--city | Registrant city | value, required | - |
--state | Registrant state | value, required | - |
--country | Registrant country code | value, required | - |
--zip | Registrant zip | value, required | - |
--phone | Registrant phone | value, required | - |
--email | Registrant email | value, required | - |
--admin-first-name | Admin first name | value, required | - |
--admin-last-name | Admin last name | value, required | - |
--admin-organization | Admin organization | value, required | - |
--admin-address-line1 | Admin address line 1 | value, required | - |
--admin-address-line2 | Admin address line 2 | value, required | - |
--admin-city | Admin city | value, required | - |
--admin-state | Admin state | value, required | - |
--admin-country | Admin country code | value, required | - |
--admin-zip | Admin zip | value, required | - |
--admin-phone | Admin phone number | value, required | - |
--admin-email | Admin email | value, required | - |
--tech-first-name | Tech first name | value, required | - |
--tech-last-name | Tech last name | value, required | - |
--tech-organization | Tech organization name | value, required | - |
--tech-address-line1 | Tech address line 1 | value, required | - |
--tech-address-line2 | Tech address line 2 | value, required | - |
--tech-city | Tech city | value, required | - |
--tech-state | Tech state | value, required | - |
--tech-country | Tech country | value, required | - |
--tech-zip | Tech zip | value, required | - |
--tech-phone | Tech phone | value, required | - |
--tech-email | Tech email | value, required | - |
--privacy-admin | Enable privacy protection for admin | boolean, optional | true |
--privacy-tech | Enable privacy protection for tech | boolean, optional | true |
--privacy-registrant | Enable privacy protection for registrant | boolean, optional | true |
--contact-type | Contact type | value, required | "person" |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
domains:remove
Remove a domain from your cloud
- Usage:
$ buddy domains:remove <domain> - Namespace:
domains - Aliases: none
- Arguments:
<domain>
| Option | Description | Contract | Default |
|---|---|---|---|
--yes | Skip the confirmation prompt | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
down
Put the application into maintenance mode
- Usage:
$ buddy down - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--message | The message to display | value, optional | false |
--retry | The number of seconds after which the request may be retried | value, optional | false |
--secret | The secret phrase to bypass maintenance mode | value, optional | false |
--allow | IP addresses allowed to access the application | value, optional | false |
--redirect | Redirect all requests to a given URL | value, optional | false |
--status | The HTTP status code to return | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy down
buddy down --message="Upgrading database"
buddy down --secret=my-secret-token
buddy down --retry=60
buddy down --allow=192.168.1.1 --allow=192.168.1.2
email
Email server management commands
- Usage:
$ buddy email - Namespace: none
- Aliases:
mail - Arguments: none
email:inbox
View inbox emails from S3
- Usage:
$ buddy email:inbox [mailbox] - Namespace:
email - Aliases: none
- Arguments:
[mailbox]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --limit | Number of emails to show | value, required | "20" |
--raw | Show raw email content for a specific message ID | value, required | - |
--bucket | S3 bucket name override | value, required | - |
email:list
List configured mailboxes
- Usage:
$ buddy email:list - Namespace:
email - Aliases: none
- Arguments: none
email:logs
View email processing logs
- Usage:
$ buddy email:logs - Namespace:
email - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --lines | Number of log lines to show | value, required | "20" |
email:reprocess
Reprocess raw emails from S3 into mailbox structure
- Usage:
$ buddy email:reprocess - Namespace:
email - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--bucket | S3 bucket name override | value, required | - |
--prefix | S3 prefix to scan | value, required | "inbox/" |
--domain | Email domain | value, required | "stacksjs.com" |
email:status
Show email server status
- Usage:
$ buddy email:status - Namespace:
email - Aliases: none
- Arguments: none
email:test
Send a test email
- Usage:
$ buddy email:test [recipient] - Namespace:
email - Aliases: none
- Arguments:
[recipient]
email:verify
Check domain verification status
- Usage:
$ buddy email:verify - Namespace:
email - Aliases: none
- Arguments: none
env:check
Check environment configuration and validate setup
- Usage:
$ buddy env:check - Namespace:
env - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--strict | Require every value in a committed env file to be encrypted, not just secret-shaped ones | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy env:check
buddy env:check --file .env.production
buddy env:check --file .env.production --strict
env:decrypt
Decrypt a value
- Usage:
$ buddy env:decrypt [key] - Namespace:
env - Aliases: none
- Arguments:
[key]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--fk, --file-keys | The path to the file containing the keys | value, optional | "" |
-o, --stdout | Output the result to stdout | boolean, optional | false |
Examples:
buddy env:decrypt
buddy env:decrypt --file .env.production
buddy env:decrypt -k "SECRET_*"
env:encrypt
Encrypt a value
- Usage:
$ buddy env:encrypt [key] - Namespace:
env - Aliases: none
- Arguments:
[key]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--fk, --file-keys | The path to the file containing the keys | value, optional | "" |
-o, --stdout | Output the result to stdout | boolean, optional | false |
--ek, --exclude-key | The key to exclude from encryption | value, optional | "" |
Examples:
buddy env:encrypt
buddy env:encrypt --file .env.production
buddy env:encrypt -k "SECRET_*"
env:get
Get an environment variable
- Usage:
$ buddy env:get [key] - Namespace:
env - Aliases: none
- Arguments:
[key]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--format | The format to output the result (json, shell, eval) | value, optional | "json" |
-a, --all | Get all environment variables | boolean, optional | false |
-p, --pretty | Pretty print the result | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy env:get SECRET
buddy env:get SECRET --file .env.production
buddy env:get --all --pretty
buddy env:get --format shell
buddy env:get --format eval
buddy env:get --format json
env:keypair
Generate a keypair
- Usage:
$ buddy env:keypair [key] - Namespace:
env - Aliases: none
- Arguments:
[key]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--fk, --file-keys | The path to the file containing the keys | value, optional | "" |
--format | The format to output the result (json, shell, eval) | value, optional | "json" |
Examples:
buddy env:keypair
buddy env:keypair --file .env.production
buddy env:keypair DOTENV_PRIVATE_KEY
env:rotate
Rotate a keypair
- Usage:
$ buddy env:rotate [key] - Namespace:
env - Aliases: none
- Arguments:
[key]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--fk, --file-keys | The path to the file containing the keys | value, optional | "" |
-o, --stdout | Output the result to stdout | boolean, optional | false |
--ek, --exclude-key | The key to exclude from encryption | value, optional | "" |
Examples:
buddy env:rotate
buddy env:rotate --file .env.production
env:set
Set an environment variable
- Usage:
$ buddy env:set [key] [value] - Namespace:
env - Aliases: none
- Arguments:
[key],[value]
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --file | The environment file to use | value, optional | "" |
--fk, --file-keys | The path to the file containing the keys | value, optional | "" |
--plain | Don't encrypt the value | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy env:set SECRET=value
buddy env:set SECRET value
buddy env:set SECRET value --file .env.production
buddy env:set SECRET value --plain
extension:build
Build the browser extension (Chrome + Firefox + Safari) from config/extension.ts
- Usage:
$ buddy extension:build - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--target | Build a single target (chrome | firefox | safari); omit to build all | value, required | - |
--version | Override the extension version (defaults to package.json) | value, required | - |
extension:chrome:publish
Build, upload, and submit the Chrome extension through Web Store API v2
- Usage:
$ buddy extension:chrome:publish - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--version | Override the extension version (defaults to package.json) | value, required | - |
--service-account-path | Google service-account JSON key path | value, required | - |
--access-token | Short-lived Chrome Web Store OAuth access token | value, required | - |
--upload-only | Upload without submitting the item for review | boolean, optional | - |
--allow-warnings | Submit even when Chrome reports validation warnings | boolean, optional | - |
extension:chrome:status
Fetch the Chrome Web Store item status
- Usage:
$ buddy extension:chrome:status - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--service-account-path | Google service-account JSON key path | value, required | - |
--access-token | Short-lived Chrome Web Store OAuth access token | value, required | - |
extension:firefox:previews
Sync the Firefox listing screenshots declared in config/extension.ts
- Usage:
$ buddy extension:firefox:previews - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--api-key | AMO JWT issuer | value, required | - |
--api-secret | AMO JWT secret | value, required | - |
--dry-run | Report what would change without touching the listing | boolean, optional | - |
extension:firefox:publish
Build and submit the Firefox extension through Mozilla Add-ons
- Usage:
$ buddy extension:firefox:publish - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--version | Override the extension version (defaults to package.json) | value, required | - |
--api-key | AMO JWT issuer | value, required | - |
--api-secret | AMO JWT secret | value, required | - |
--source-code | Human-readable source archive for AMO review | value, required | - |
--approval-timeout | How long to wait for human approval (default 0) | value, required | - |
extension:init
Scaffold a Chrome, Firefox, or Safari extension, including the Safari Xcode app
- Usage:
$ buddy extension:init - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--name | Extension display name | value, required | - |
--target | Scaffold chrome, firefox, safari, or all (default all) | value, required | - |
--bundle-id | Safari container bundle identifier | value, required | - |
--team-id | Apple Developer team used for Safari signing | value, required | - |
--platform | Safari platform: macos, ios, or all (default all) | value, required | - |
--force | Overwrite existing starter and Safari scaffold files | boolean, optional | - |
extension:package
Build + zip the browser extension into store-ready archives
- Usage:
$ buddy extension:package - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--target | Package a single target (chrome | firefox | safari); omit to package all | value, required | - |
--version | Override the extension version (defaults to package.json) | value, required | - |
extension:publish
Publish to every store this project is set up for - the release-tag entry point
- Usage:
$ buddy extension:publish - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--version | Override the extension version (defaults to package.json) | value, required | - |
--targets | Comma-separated subset of chrome,firefox,safari | value, required | - |
--dry-run | Report the publish plan without uploading anything | boolean, optional | - |
extension:safari:app
Build the extension and its macOS, iPhone, and iPad Safari container apps
- Usage:
$ buddy extension:safari:app - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--release | Build the Release configuration (default Debug) | boolean, optional | - |
--signed | Sign locally against the Apple ID in Xcode (local builds only - see below) | boolean, optional | - |
--skip-xcodebuild | Only build + sync the extension payload | boolean, optional | - |
--version | Override the extension version (defaults to package.json) | value, required | - |
--platform | Build macos, ios, or all (defaults to config safariPlatforms) | value, required | - |
extension:safari:init
Scaffold the Safari container app (Xcode project) from the template
- Usage:
$ buddy extension:safari:init - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--bundle-id | Base bundle identifier (defaults to config safariBundleId) | value, required | - |
--dir | Output directory for the Xcode project (default safari) | value, required | - |
--force | Overwrite existing scaffold files | boolean, optional | - |
--team-id | Apple Developer team used for signing | value, required | - |
extension:safari:provision
Register Safari Bundle IDs and check the App Store Connect app record
- Usage:
$ buddy extension:safari:provision - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | Path to the App Store Connect AuthKey_*.p8 file | value, required | - |
--check | Report missing resources without creating Bundle IDs | boolean, optional | - |
--version | Create or align App Store versions (defaults to package.json) | value, required | - |
--platform | Provision macos, ios, or all (defaults to config safariPlatforms) | value, required | - |
extension:safari:publish
Archive and validate or upload the Safari app to App Store Connect
- Usage:
$ buddy extension:safari:publish - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--version | Override the marketing version (defaults to package.json) | value, required | - |
--build-number | CFBundleVersion (defaults to GITHUB_RUN_NUMBER or Unix time) | value, required | - |
--team-id | Apple Developer team (defaults to config safariTeamId) | value, required | - |
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | Path to the App Store Connect AuthKey_*.p8 file | value, required | - |
--validate-only | Create and validate the archive without uploading it | boolean, optional | - |
--platform | Publish macos, ios, or all (defaults to config safariPlatforms) | value, required | - |
--skip-screenshots | Do not regenerate the App Store screenshot set before publishing | boolean, optional | - |
extension:safari:submit
Synchronize metadata and submit an existing Safari version to App Review
- Usage:
$ buddy extension:safari:submit - Namespace:
extension - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--version | Marketing version to submit (defaults to package.json) | value, required | - |
--api-key-id | App Store Connect API key ID | value, required | - |
--api-issuer-id | App Store Connect API issuer ID | value, required | - |
--api-key-path | Path to the App Store Connect AuthKey_*.p8 file | value, required | - |
--platform | Submit macos, ios, or all (defaults to config safariPlatforms) | value, required | - |
--prepare-only | Synchronize the listing without submitting it for review | boolean, optional | - |
format
Format your project codebase
- Usage:
$ buddy format - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-w, --write | Write changes to files | boolean, optional | false |
-c, --check | Check formatting without making changes | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
format:check
Check formatting without making changes
- Usage:
$ buddy format:check - Namespace:
format - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
forms:install
Activate the forms feature bundle. User-defined forms: builder models, conditional fields, public submit + CSV export.
- Usage:
$ buddy forms:install - Namespace:
forms - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing forms files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
forms:uninstall
Deactivate the forms feature bundle.
- Usage:
$ buddy forms:uninstall - Namespace:
forms - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the forms scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
fresh
Re-installs your npm dependencies
- Usage:
$ buddy fresh - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-f, --force | Skip the confirmation prompt (required in CI/non-interactive shells) | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate
Automagically build any of your libraries/packages for production use. Select any of the following packages
- Usage:
$ buddy generate - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-t, --types | Generate your TypeScript types | boolean, optional | - |
-e, --entries | Generate your function & Component Library Entry Points | boolean, optional | - |
-w, --web-types | Generate web-types.json for IDEs | boolean, optional | - |
-c, --custom-data | Generate VS Code custom data (custom-elements.json) for IDEs | boolean, optional | - |
-i, --ide-helpers | Generate IDE helpers | boolean, optional | - |
-c, --component-meta | Generate component meta information | boolean, optional | - |
-p, --pantry | Generate the pantry configuration file | boolean, optional | - |
-o, --openapi | Generate the OpenAPI specification | boolean, optional | - |
--images | Generate every image declared in config/images.ts | boolean, optional | - |
-p, --project | Target a specific project | value, optional | false |
--core-symlink | Generate symlink of the core framework to the project root | boolean, optional | - |
--verbose | Enable verbose output | boolean, optional | false |
generate:app-icons
Generate the app icon and favicon sets
- Usage:
$ buddy generate:app-icons - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
generate:app-store
Generate the App Store screenshot set
- Usage:
$ buddy generate:app-store - Namespace:
generate - Aliases:
generate:screenshots - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
generate:component-meta
Generate component meta information
- Usage:
$ buddy generate:component-meta - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:core-symlink
Symlink .framework -> storage/framework. A shortcut for core developers.
- Usage:
$ buddy generate:core-symlink - Namespace:
generate - Aliases: none
- Arguments: none
generate:db-types
Refresh database/types.d.ts for db.selectFrom autocomplete (stacksjs/stacks#1923)
- Usage:
$ buddy generate:db-types - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Print the would-be file content without writing | boolean, optional | false |
generate:entries
Generate your function & Component Library Entry Points
- Usage:
$ buddy generate:entries - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:ide-helpers
Generate IDE helpers
- Usage:
$ buddy generate:ide-helpers - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:images
Generate every image declared in config/images.ts
- Usage:
$ buddy generate:images - Namespace:
generate - Aliases:
images:generate - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--social | Only build the social cards | boolean, optional | - |
--app-store | Only build the App Store screenshots | boolean, optional | - |
--app-icons | Only build the app icons and favicons | boolean, optional | - |
--verbose | Enable verbose output | boolean, optional | false |
generate:migrations
Generate Migrations
- Usage:
$ buddy generate:migrations - Namespace:
generate - Aliases: none
- Arguments: none
generate:og
Generate the social cards used by link previews
- Usage:
$ buddy generate:og - Namespace:
generate - Aliases:
generate:social - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
generate:openapi-spec
Generate the OpenAPI specification
- Usage:
$ buddy generate:openapi-spec - Namespace:
generate - Aliases:
generate:openapi - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:pantry-config
Generate the pantry configuration file
- Usage:
$ buddy generate:pantry-config - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:types
Generate your TypeScript types
- Usage:
$ buddy generate:types - Namespace:
generate - Aliases:
types:generate - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-w, --watch | Re-run on changes to models/ and config/ | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:vschema
Derive a Vitess VSchema from your models (writes database/vschema.json)
- Usage:
$ buddy generate:vschema - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Print the VSchema without writing it | boolean, optional | false |
--out | Where to write the VSchema | value, optional | "database/vschema.json" |
generate:vscode-custom-data
Generate VS Code custom data (custom-elements.json) for IDEs
- Usage:
$ buddy generate:vscode-custom-data - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
generate:web-types
Generate web-types.json for IDEs
- Usage:
$ buddy generate:web-types - Namespace:
generate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
http
Send an HTTP request to a domain
- Usage:
$ buddy http [domain] - Namespace: none
- Aliases: none
- Arguments:
[domain]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-v, --verbose | Enable verbose output | boolean, optional | false |
inspire
Inspire yourself with a random quote
- Usage:
$ buddy inspire - Namespace: none
- Aliases:
insp - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--two, -t | Inspire yourself with two random quotes | boolean, optional | false |
inspire:two
Inspire yourself with two random quotes
- Usage:
$ buddy inspire:two - Namespace:
inspire - Aliases: none
- Arguments: none
install
Install your dependencies
- Usage:
$ buddy install - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-v, --verbose | Enable verbose output | boolean, optional | false |
key:generate
Generate & set the application key.
- Usage:
$ buddy key:generate - Namespace:
key - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
launch
Bring the application out of coming soon mode
- Usage:
$ buddy launch - Namespace: none
- Aliases:
coming-soon:off - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy launch
link:core
Point this app's @stacksjs/* at a local framework checkout
- Usage:
$ buddy link:core [...packages] - Namespace:
link - Aliases: none
- Arguments:
[packages...]
| Option | Description | Contract | Default |
|---|---|---|---|
--path | Framework checkout to link against | value, required | - |
--all | Link every core package the app has installed | boolean, optional | false |
Examples:
buddy link:core auth router
buddy link:core --all --path ../stacks
lint
Automagically lints your project codebase
- Usage:
$ buddy lint - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --fix | Automagically fixes all lint errors | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--stx | Run the stx conformance checks instead of code style | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
lint:fix
Automagically fixes all lint errors
- Usage:
$ buddy lint:fix - Namespace:
lint - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
list
List all available Buddy commands
- Usage:
$ buddy list - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-f, --filter | Filter commands by name or group | value, optional | - |
-n, --namespace | Filter commands by namespace (e.g., make, env, db) | value, optional | - |
-g, --grouped | Group commands by category | boolean, optional | true |
--format | Output format (text, json) | value, optional | "text" |
-J, --json | Output the complete command inventory as JSON | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy list
buddy list --filter=make
buddy list --namespace=make
buddy list --namespace=env
buddy list --no-grouped
buddy list --format=json
buddy list --json
mail:credentials
Show SMTP credentials for email access
- Usage:
$ buddy mail:credentials [email] - Namespace:
mail - Aliases: none
- Arguments:
[email]
mail:dev
Run the local mail catcher: accepts every message, delivers none, shows them in the webmail UI
- Usage:
$ buddy mail:dev - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--port | SMTP port (default: 1025) | value, required | - |
--ui-port | Webmail UI port (default: 8025) | value, required | - |
--no-open | Do not open the webmail UI in a browser | boolean, optional, negated | false |
Examples:
buddy mail:dev
buddy mail:dev --port 2525 --ui-port 8080
mail:forward:compile
Compile and validate the live RFC 5228 forwarding script
- Usage:
$ buddy mail:forward:compile - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:logs
Show mail server logs from production
- Usage:
$ buddy mail:logs - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --lines | Number of log lines to show | value, required | "50" |
-f, --follow | Follow log output (poll every 5s) | boolean, optional | - |
--filter | Filter logs by pattern (e.g. AUTH, LOGIN, error) | value, required | - |
mail:port25:request
Request port 25 unblock for direct SMTP delivery
- Usage:
$ buddy mail:port25:request - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--provider | Cloud provider: aws or hetzner | value, required | "aws" |
--instance-id | AWS EC2 instance ID (auto-detected if not provided) | value, required | - |
--server-id | Hetzner server ID (auto-detected if not provided) | value, required | - |
--elastic-ip | AWS Elastic IP address | value, required | - |
--rdns | Reverse DNS hostname (e.g. mail.stacksjs.com) | value, required | - |
--use-case | Description of email use case | value, required | - |
mail:port25:status
Check outbound port 25 status on the mail server
- Usage:
$ buddy mail:port25:status - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--provider | Cloud provider: aws or hetzner | value, required | "aws" |
mail:preview
Open the dev-only Mailable preview UI in your browser
- Usage:
$ buddy mail:preview - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--no-open | Print the URL but skip the browser-open step | boolean, optional, negated | false |
--port | Override the API port (default: from config.ports.api / PORT_API) | value, required | - |
Examples:
buddy mail:preview
buddy mail:preview --no-open
buddy mail:preview --port 4000
mail:provision
Provision this app's mail from config/email.ts onto the shared mail server (domain + DKIM + mailboxes + MX/SPF/DKIM/DMARC DNS). Reusable + idempotent; the same reconcile buddy deploy runs.
- Usage:
$ buddy mail:provision - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--ip | Mail server IP (defaults to the A record of config.email.domain) | value, required | - |
mail:proxy
Start local IMAP proxy for Mail.app
- Usage:
$ buddy mail:proxy - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--port | IMAP proxy port | value, required | "1993" |
--api | Mail API URL | value, required | - |
mail:server
Start SMTP relay server
- Usage:
$ buddy mail:server - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--port | SMTP port | value, required | "587" |
mail:status
Show mail server status
- Usage:
$ buddy mail:status - Namespace:
mail - Aliases: none
- Arguments: none
mail:storage:backup
Create and verify an encrypted local mail backup
- Usage:
$ buddy mail:storage:backup - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:escrow
Copy the machine-bound LUKS key to AWS Secrets Manager
- Usage:
$ buddy mail:storage:escrow - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--force | Replace a different existing secret | boolean, optional | false |
mail:storage:externalize
Move the LUKS key off-host and require external unlocks
- Usage:
$ buddy mail:storage:externalize - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--force | Replace a different existing secret | boolean, optional | false |
mail:storage:header:backup
Stream a LUKS header backup to S3 with KMS encryption
- Usage:
$ buddy mail:storage:header:backup - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--bucket | Recovery bucket (defaults to | value, required | - |
mail:storage:key:recovery:add
Add an independent LUKS recovery key to macOS Keychain
- Usage:
$ buddy mail:storage:key:recovery:add - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:key:recovery:verify
Verify the Keychain recovery key against the live LUKS header
- Usage:
$ buddy mail:storage:key:recovery:verify - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:key:slot:remove
Remove an unusable non-primary LUKS keyslot
- Usage:
$ buddy mail:storage:key:slot:remove - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--slot | LUKS keyslot number to remove | value, required | - |
mail:storage:key:verify
Verify the external key against the LUKS2 header
- Usage:
$ buddy mail:storage:key:verify - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:kms:ensure
Create and apply the customer-managed production mail KMS key
- Usage:
$ buddy mail:storage:kms:ensure - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:lock
Stop mail and lock external mail storage
- Usage:
$ buddy mail:storage:lock - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:maildir:migrate
Migrate live mailboxes to canonical Maildir++ layout
- Usage:
$ buddy mail:storage:maildir:migrate - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:restic:configure
Configure client-encrypted Restic backups to S3
- Usage:
$ buddy mail:storage:restic:configure - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--force | Rotate an existing dedicated IAM access key | boolean, optional | false |
mail:storage:restore:check
Restore and validate the newest off-host mail snapshot
- Usage:
$ buddy mail:storage:restore:check - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:status
Show encrypted mail storage and external-key status
- Usage:
$ buddy mail:storage:status - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:unlock
Unlock external mail storage and start mail
- Usage:
$ buddy mail:storage:unlock - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
mail:storage:volume:migrate
Create a dedicated Hetzner volume and migrate encrypted mail storage
- Usage:
$ buddy mail:storage:volume:migrate - Namespace:
mail - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--host | Mail server hostname or IP | value, required | - |
--secret | AWS Secrets Manager secret ID | value, required | - |
--region | AWS region | value, required | "us-east-1" |
--profile | AWS credential profile | value, required | "default" |
--size | Hetzner volume size in GiB | value, required | "20" |
mail:test
Test mail API connection
- Usage:
$ buddy mail:test - Namespace:
mail - Aliases: none
- Arguments: none
mail:user:add
Add a mail user
- Usage:
$ buddy mail:user:add <email> - Namespace:
mail - Aliases: none
- Arguments:
<email>
| Option | Description | Contract | Default |
|---|---|---|---|
--password | User password (generated if not provided) | value, required | - |
mail:user:delete
Delete a mail user
- Usage:
$ buddy mail:user:delete <email> - Namespace:
mail - Aliases: none
- Arguments:
<email>
mail:user:list
List mail users
- Usage:
$ buddy mail:user:list - Namespace:
mail - Aliases: none
- Arguments: none
make
The make command
- Usage:
$ buddy make [make] - Namespace: none
- Aliases: none
- Arguments:
[make]
| Option | Description | Contract | Default |
|---|---|---|---|
-a, --action | Create a new action | value, optional | false |
-c, --component | Create a new component | value, optional | false |
-d, --database | Create a new database | value, optional | false |
-f, --factory | Create a new factory | value, optional | false |
--fn, --function | Create a new function | value, optional | false |
-l, --language | Create a new language | value, optional | false |
-m, --model | Create a new model | value, optional | false |
--mw, --middleware | Create a new middleware | value, optional | false |
-p, --page | Create a new page | value, optional | false |
--mg, --migration | Create a new migration | value, optional | false |
-n, --notification | Create a new notification | value, optional | false |
--qt, --queue-table | Make queue migration | boolean, optional | false |
-s, --stack | Create a new stack | value, optional | false |
--dry-run | Preview the files that would be generated without writing | boolean, optional | false |
--with-validation | Include a validation rules block in the generated stub | boolean, optional | false |
--with-auth | Include auth-aware boilerplate in the generated stub | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:action
Create a new action
- Usage:
$ buddy make:action [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--dry-run | Preview the file without writing | boolean, optional | false |
--with-validation | Generate a stub that calls validate() | boolean, optional | false |
--with-auth | Generate a stub that requires an authenticated user | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:certificate
Create a new SSL Certificate
- Usage:
$ buddy make:certificate - Namespace:
make - Aliases:
make:cert - Arguments: none
Examples:
buddy make:certificate
make:command
Create a new CLI command
- Usage:
$ buddy make:command [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-s, --signature | The command signature (CLI name) | value, optional | false |
-d, --description | The command description | value, optional | false |
--no-register | Do not register in Commands.ts | boolean, optional, negated | true |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy make:command SendEmails
buddy make:command SendEmails --signature=send-emails
make:component
Create a new component
- Usage:
$ buddy make:component [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:database
Create a new database
- Usage:
$ buddy make:database [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:factory
Create a new factory
- Usage:
$ buddy make:factory [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:function
Create a new function
- Usage:
$ buddy make:function [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:job
Create a new job
- Usage:
$ buddy make:job [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-q, --queue | The queue to dispatch to | value, optional | "default" |
-c, --class | Create a class-based job | boolean, optional | false |
-t, --tries | Number of retry attempts | value, optional | 3 |
-b, --backoff | Backoff delay in seconds | value, optional | 3 |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:lang
Create a new language
- Usage:
$ buddy make:lang [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:mail
Create a new Mailable + companion stx template
- Usage:
$ buddy make:mail [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-f, --force | Overwrite existing files | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy make:mail OrderShipped
buddy make:mail welcome-back // PascalCases to WelcomeBack, kebab-cases to welcome-back
buddy make:mail Welcome --force // overwrite existing files
make:migration
Create a new migration
- Usage:
$ buddy make:migration [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:model
Create a new model
- Usage:
$ buddy make:model [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:notification
Create a new notification
- Usage:
$ buddy make:notification [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-e, --email | Is it an email notification? | boolean, optional | true |
-c, --chat | Is it a chat notification? | boolean, optional | false |
-s, --sms | Is it a SMS notification? | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:policy
Create a new authorization policy
- Usage:
$ buddy make:policy [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-m, --model | The model this policy is for | value, optional | false |
--no-register | Do not register in Gates.ts | boolean, optional, negated | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy make:policy PostPolicy
buddy make:policy CommentPolicy --model=Comment
make:queue-table
Create the queue jobs table migration
- Usage:
$ buddy make:queue-table - Namespace:
make - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:resource
Create a new API resource
- Usage:
$ buddy make:resource [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-m, --model | The model this resource is for | value, optional | false |
-c, --collection | Create a collection resource | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy make:resource UserResource
buddy make:resource PostResource --model=Post
buddy make:resource PostCollection --collection
make:stack
Create a new stack
- Usage:
$ buddy make:stack [name] - Namespace:
make - Aliases: none
- Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
make:view
Create a new page
- Usage:
$ buddy make:view [name] - Namespace:
make - Aliases:
make:page [name] - Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the action | value, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
marketing:install
Activate the marketing feature bundle. /api/email/subscribe, /api/contact, Campaign/EmailList/SocialPost.
- Usage:
$ buddy marketing:install - Namespace:
marketing - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing marketing files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
marketing:uninstall
Deactivate the marketing feature bundle.
- Usage:
$ buddy marketing:uninstall - Namespace:
marketing - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the marketing scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
migrate
Migrates your database
- Usage:
$ buddy migrate - Namespace: none
- Aliases:
db:migrate - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-d, --diff | Show the SQL that would be run | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
-a, --auth | Also migrate auth tables (oauth_clients, oauth_access_tokens, oauth_refresh_tokens, password_resets) | boolean, optional | true |
--no-auth | Skip auth/oauth table migrations | boolean, optional, negated | true |
-f, --force | Apply destructive changes (drop column/table, lossy type change) without confirmation | boolean, optional | false |
--create-database | Create the database if it does not exist, without asking | boolean, optional | false |
--from-db | Diff against the live database schema instead of the snapshot (self-heal drift) | boolean, optional | false |
--no-rename | Treat renamed columns as drop + add instead of a data-preserving rename | boolean, optional, negated | true |
--verbose | Enable verbose output | boolean, optional | false |
migrate:dns
Migrates your database
- Usage:
$ buddy migrate:dns - Namespace:
migrate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
migrate:fresh
Drop all tables and re-run every migration (destroys all data)
- Usage:
$ buddy migrate:fresh - Namespace:
migrate - Aliases:
db:fresh - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-d, --diff | Show the SQL that would be run | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
-s, --seed | Run database seeders after migration | boolean, optional | false |
-a, --auth | Also migrate auth tables (oauth_clients, oauth_access_tokens, oauth_refresh_tokens, password_resets) | boolean, optional | true |
--no-auth | Skip auth/oauth table migrations | boolean, optional, negated | true |
--create-database | Create the database if it does not exist, without asking | boolean, optional | false |
-f, --force | Skip the drop-database confirmation (only honored when the migrateFresh guard is "allow") | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
migrate:project
Port an existing project (Laravel, Rails) into a Stacks project.
- Usage:
$ buddy migrate:project [target] - Namespace:
migrate - Aliases: none
- Arguments:
[target]
| Option | Description | Contract | Default |
|---|---|---|---|
--from | Source framework - one of: laravel, rails | value, required | "laravel" |
--source | Path to the existing source project. Defaults to the current working directory. | value, required | false |
--dry-run | Show what would be translated without writing files. | boolean, optional | false |
--verbose | Print the per-entry table after the summary. | boolean, optional | false |
migrate:regenerate
Rebuild database/migrations from your models for a given dialect
- Usage:
$ buddy migrate:regenerate [dialect] - Namespace:
migrate - Aliases: none
- Arguments:
[dialect]
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Show what would change without writing anything | boolean, optional | false |
-f, --force | Regenerate even though the database already has migrations recorded | boolean, optional | false |
--replace-unmarked | Also delete migrations carrying no @generated marker (pre-marker corpora only) | boolean, optional | false |
--only-existing-tables | Rebuild exactly the tables already in the corpus, for changing dialect without adopting the framework schema | boolean, optional | false |
migrate:status
Compare database/migrations, the migrations ledger, and the live schema
- Usage:
$ buddy migrate:status - Namespace:
migrate - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--reconcile | Repair the ledger where the schema proves what happened | boolean, optional | false |
--include-partial | With --reconcile, also record half-applied migrations | boolean, optional | false |
--json | Emit the audit as JSON | boolean, optional | false |
migrate:switch
Pre-flight check + plan for switching DB_CONNECTION between sqlite / mysql / vitess / postgres
- Usage:
$ buddy migrate:switch <driver> - Namespace:
migrate - Aliases: none
- Arguments:
<driver>
monitoring:install
Activate the monitoring feature bundle. Error model + error-tracking views and actions.
- Usage:
$ buddy monitoring:install - Namespace:
monitoring - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing monitoring files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
monitoring:uninstall
Deactivate the monitoring feature bundle.
- Usage:
$ buddy monitoring:uninstall - Namespace:
monitoring - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the monitoring scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
new
Create a new Stacks project
- Usage:
$ buddy new [name] - Namespace: none
- Aliases:
create [name] - Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | The name of the project | value, optional | false |
-u, --ui | Are you building a UI? | boolean, optional | true |
-c, --components | Are you building UI components? | boolean, optional | true |
-w, --web-components | Automagically built optimized custom elements/web components? | boolean, optional | true |
-p, --views | How about views? | boolean, optional | true |
-f, --functions | Are you developing functions/composables? | boolean, optional | true |
-a, --api | Are you building an API? | boolean, optional | true |
-d, --database | Do you need a database? | boolean, optional | true |
--ca, --cache | Do you need caching? | boolean, optional | false |
-e, --email | Do you need email? | boolean, optional | false |
-P, --project | Target a specific project | value, optional | false |
-m, --minimal | Skip optional feature bundles (cms, commerce, dashboard, marketing, monitoring, realtime, queue) - bare-bones API/SPA starter that can re-add them later via ./buddy <feature>:install. | boolean, optional | false |
--with-core | Keep the framework vendored in storage/framework/core as a Bun workspace, for working ON Stacks. Apps that only work WITH Stacks want the default, which resolves every @stacksjs/* package from npm. | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
outdated
List all the outdated project dependencies
- Usage:
$ buddy outdated - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
package:discover
Discover Stacks-compatible packages from pantry
- Usage:
$ buddy package:discover - Namespace:
package - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
phone
Phone/voice service management commands
- Usage:
$ buddy phone - Namespace: none
- Aliases: none
- Arguments: none
phone:numbers
List phone numbers
- Usage:
$ buddy phone:numbers - Namespace:
phone - Aliases: none
- Arguments: none
phone:search
Search available phone numbers
- Usage:
$ buddy phone:search [country] - Namespace:
phone - Aliases: none
- Arguments:
[country]
| Option | Description | Contract | Default |
|---|---|---|---|
-t, --type | Phone number type (TOLL_FREE, DID) | value, required | "TOLL_FREE" |
phone:setup
Initialize phone infrastructure
- Usage:
$ buddy phone:setup - Namespace:
phone - Aliases: none
- Arguments: none
phone:status
Show phone service status
- Usage:
$ buddy phone:status - Namespace:
phone - Aliases: none
- Arguments: none
ports
Let buddy check your project for potential issues and misconfigurations
- Usage:
$ buddy ports - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-l, --list | List the used ports | boolean, optional | true |
-c, --check | Check if the ports are available | boolean, optional | false |
-p, --project | Target a specific project | value, optional | - |
-q, --quiet | Use minimal output | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
ports:check
Check if the ports are available
- Usage:
$ buddy ports:check - Namespace:
ports - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | "<project root>" |
-q, --quiet | Use minimal output | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
ports:list
Check if the ports are available
- Usage:
$ buddy ports:list - Namespace:
ports - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | - |
-q, --quiet | Use minimal output | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
prepublish
Run your prepublish script
- Usage:
$ buddy prepublish - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
preview
Serve a static build locally, the way a static host would
- Usage:
$ buddy preview [dir] - Namespace: none
- Aliases: none
- Arguments:
[dir]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --port | Port to listen on | value, required | "3001" |
Examples:
buddy preview
buddy preview dist --port 4000
projects
Find all Stacks projects on your system
- Usage:
$ buddy projects - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-q, --quiet | Use minimal output | boolean, optional | false |
-l, --list | List all local Stacks projects | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
projects:list
Find all Stacks projects on your system
- Usage:
$ buddy projects:list - Namespace:
projects - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-q, --quiet | Use minimal output | boolean, optional | false |
-l, --list | List all local Stacks projects | boolean, optional | true |
--verbose | Enable verbose output | boolean, optional | false |
publish
Publish a Stacks default into your userland (app/) directory so you can customize it
- Usage:
$ buddy publish [resource] [name] - Namespace: none
- Aliases: none
- Arguments:
[resource],[name]
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
publish:action
Publish a default action from storage/framework/defaults/app/Actions/ to app/Actions/
- Usage:
$ buddy publish:action <name> - Namespace:
publish - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
publish:controller
Publish a default controller from storage/framework/defaults/app/Controllers/ to app/Controllers/
- Usage:
$ buddy publish:controller <name> - Namespace:
publish - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
publish:core
Publish a framework package source from node_modules/@stacksjs/
- Usage:
$ buddy publish:core [pkg] - Namespace:
publish - Aliases: none
- Arguments:
[pkg]
| Option | Description | Contract | Default |
|---|---|---|---|
--all | Vendor the whole framework: copy storage/framework/core out of a local Stacks checkout and wire it up as a Bun workspace | boolean, optional | false |
--path | The Stacks checkout to vendor from (defaults to $STACKS_FRAMEWORK_PATH, ../stacks, then ~/Code/stacks) | value, required | - |
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy publish:core router
buddy publish:core --all
buddy publish:core --all --path ../stacks
publish:middleware
Publish a default middleware from storage/framework/defaults/app/Middleware/ to app/Middleware/
- Usage:
$ buddy publish:middleware <name> - Namespace:
publish - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
publish:model
Publish a default model from storage/framework/defaults/app/Models/ to app/Models/
- Usage:
$ buddy publish:model <name> - Namespace:
publish - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite an existing userland file | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:clear
Clear all jobs from the queue
- Usage:
$ buddy queue:clear - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--force | Force the operation without confirmation | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:dlq
List dead-letter jobs (jobs that re-failed after retry)
- Usage:
$ buddy queue:dlq - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--reason | Filter by reason (repeat-failure | poison-detected | circuit-broken | manual) | value, optional | false |
--since | Only show rows dead-lettered since (e.g. 1h, 30m, 2d) | value, optional | false |
--limit | Maximum rows to display (default 100) | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:dlq:purge
Delete dead-letter rows older than a retention window
- Usage:
$ buddy queue:dlq:purge - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--older-than-days | Retention window in days (default 30) | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:dlq:retry
Re-enqueue a dead-letter job back into its queue
- Usage:
$ buddy queue:dlq:retry - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--id | Dead-letter row id to retry | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:failed
List all failed jobs
- Usage:
$ buddy queue:failed - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--since | Only show jobs failed since (e.g. 1h, 30m, 2d) | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:flush
Delete all failed jobs
- Usage:
$ buddy queue:flush - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--force | Force the operation without confirmation | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:inspect
Inspect a specific job
- Usage:
$ buddy queue:inspect [id] - Namespace:
queue - Aliases: none
- Arguments:
[id]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--failed | Inspect a failed job | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:install
Activate the queue feature bundle. Job + FailedJob models + queue dashboard pages.
- Usage:
$ buddy queue:install - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing queue files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
queue:list
List queued jobs (flat row view, filterable by queue/status)
- Usage:
$ buddy queue:list - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--status | Filter by pending | reserved | delayed | value, optional | false |
--limit | Maximum rows to display (default 50) | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:monitor
Monitor queue status in real-time
- Usage:
$ buddy queue:monitor - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
-i, --interval | Refresh interval in milliseconds | value, optional | "2000" |
--verbose | Enable verbose output | boolean, optional | false |
queue:pause
Manually pause a queue (circuit-breaker)
- Usage:
$ buddy queue:pause - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--queue | Queue name to pause | value, optional | false |
--for | Pause duration in seconds (default 300) | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:quarantine
List quarantined jobs (or --add a manual quarantine)
- Usage:
$ buddy queue:quarantine - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--add | Manually quarantine a job class | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:resume
Resume a paused queue (circuit-breaker)
- Usage:
$ buddy queue:resume - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--queue | Queue name to resume | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:retry
Retry failed jobs
- Usage:
$ buddy queue:retry [id] - Namespace:
queue - Aliases: none
- Arguments:
[id]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--all | Apply to all items | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:schedule
Start the job scheduler for cron-based jobs
- Usage:
$ buddy queue:schedule - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:schedule:list
List all scheduled jobs
- Usage:
$ buddy queue:schedule:list - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:status
Display the status of queue workers
- Usage:
$ buddy queue:status - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:table
Create a migration for the jobs database table
- Usage:
$ buddy queue:table - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:uninstall
Deactivate the queue feature bundle.
- Usage:
$ buddy queue:uninstall - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the queue scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
queue:unquarantine
Lift the quarantine on a job class
- Usage:
$ buddy queue:unquarantine - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--name | Job class name to unquarantine | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
queue:work
Start processing jobs on the queue
- Usage:
$ buddy queue:work - Namespace:
queue - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
-q, --queue | Specify queue name | value, optional | false |
-c, --connection | Queue connection to use | value, optional | false |
--concurrency | Number of concurrent workers | value, optional | "1" |
--verbose | Enable verbose output | boolean, optional | false |
realtime:install
Activate the realtime feature bundle. WebSocket broadcaster + Websocket model + realtime-stats actions.
- Usage:
$ buddy realtime:install - Namespace:
realtime - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Overwrite any existing realtime files in the project (default skips existing paths so the install is idempotent). | boolean, optional | - |
realtime:uninstall
Deactivate the realtime feature bundle.
- Usage:
$ buddy realtime:uninstall - Namespace:
realtime - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--keep-files | Don't delete the realtime scaffolding (action/model/view files). Flip the flag only. | boolean, optional | - |
release
Release a new version of your libraries/packages
- Usage:
$ buddy release - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Run the release without actually releasing | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--bump | Non-interactive bump: patch | minor | major | prepatch | preminor | premajor | prerelease | x.y.z | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
route:list
Lists your routes
- Usage:
$ buddy route:list - Namespace:
route - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
scaffold:crud
Generate model, migration, and CRUD actions
- Usage:
$ buddy scaffold:crud [name] - Namespace:
scaffold - Aliases:
make:crud,make:scaffold - Arguments:
[name]
| Option | Description | Contract | Default |
|---|---|---|---|
-n, --name | Resource name (PascalCase) | value, optional | false |
-f, --fields | Comma-separated field list, e.g. title:string,body:text,published:boolean | value, optional | "" |
--dry-run | Preview the generated files without writing | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy scaffold:crud Post --fields=title:string,body:text,published:boolean
schedule:disable
Pause a scheduled task without editing source
- Usage:
$ buddy schedule:disable <name> - Namespace:
schedule - Aliases: none
- Arguments:
<name>
schedule:enable
Resume a paused scheduled task
- Usage:
$ buddy schedule:enable <name> - Namespace:
schedule - Aliases: none
- Arguments:
<name>
schedule:list
List all registered scheduled tasks with their next run time
- Usage:
$ buddy schedule:list - Namespace:
schedule - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--json | Print a machine-readable schedule registry | boolean, optional | false |
schedule:run
Run the scheduler
- Usage:
$ buddy schedule:run - Namespace:
schedule - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
schedule:run-one
Run one registered scheduled task immediately
- Usage:
$ buddy schedule:run-one <name> - Namespace:
schedule - Aliases: none
- Arguments:
<name>
schedule:status
Show currently-held overlap locks (this-process only)
- Usage:
$ buddy schedule:status - Namespace:
schedule - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--json | Print machine-readable scheduler status | boolean, optional | false |
search-engine:settings
List index settings
- Usage:
$ buddy search-engine:settings - Namespace:
search-engine - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-m, --model | Target a specific model | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
search-engine:update
Indexes database data to search engine
- Usage:
$ buddy search-engine:update - Namespace:
search-engine - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-m, --model | Target a specific model | value, optional | "" |
-f, --flush | Flushes all data from search engine | value, optional | false |
-s, --settings | Update index settings | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
search:flush
Delete all documents from a model index (Scout-style alias)
- Usage:
$ buddy search:flush [model] - Namespace:
search - Aliases: none
- Arguments:
[model]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
search:reindex
Re-index a model (Scout-style alias for search-engine:update)
- Usage:
$ buddy search:reindex [model] - Namespace:
search - Aliases: none
- Arguments:
[model]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
seed
Seed your database
- Usage:
$ buddy seed - Namespace: none
- Aliases:
db:seed - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--only | Comma-separated list of models to seed | value, optional | "" |
--except | Comma-separated list of models to skip | value, optional | "" |
--include-defaults | Also seed the framework's built-in models | boolean, optional | false |
--allow-protected | Seed auth/oauth models even on a non-fresh DB (will invalidate live tokens) | boolean, optional | false |
--fresh | Truncate tables before seeding | boolean, optional | false |
--append | Add rows to tables that already have some, instead of skipping them | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
seed:roles
Seed default RBAC role packs (admin, dev, client)
- Usage:
$ buddy seed:roles - Namespace:
seed - Aliases:
roles:seed - Arguments: none
serve
Start the production HTTP server (STX views + /api proxy + coming-soon/maintenance gate)
- Usage:
$ buddy serve - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --port | Port to listen on (defaults to PORT env or 3000) | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
serve:api
Start the production API server (bun-router routes the frontend proxies /api to)
- Usage:
$ buddy serve:api - Namespace:
serve - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --port | Port to listen on (defaults to PORT env or 3008) | value, required | - |
setup
This command ensures your project is setup correctly
- Usage:
$ buddy setup - Namespace: none
- Aliases:
ensure - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--skip-aws | Skip AWS configuration during setup | boolean, optional | false |
--skip-keygen | Skip generating an application key during setup | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
setup:ai
Set the project up for an AI coding agent (Claude Code, Codex, Cursor, Copilot, Gemini)
- Usage:
$ buddy setup:ai [provider] - Namespace:
setup - Aliases:
ai:setup - Arguments:
[provider]
| Option | Description | Contract | Default |
|---|---|---|---|
--copy | Copy the agent files instead of symlinking them, so they can be edited per project | boolean, optional | false |
--force | Overwrite files that already exist | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
setup:oh-my-zsh
Enable Oh My Zsh
- Usage:
$ buddy setup:oh-my-zsh - Namespace:
setup - Aliases:
upgrade:oh-my-zsh - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
setup:ssl
Setup SSL certificates and hosts file for HTTPS development
- Usage:
$ buddy setup:ssl - Namespace:
setup - Aliases:
ssl:setup - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-d, --domain | Custom domain to setup (defaults to APP_URL) | value, optional | - |
--skip-hosts | Skip adding domain to hosts file | boolean, optional | false |
--skip-trust | Skip trusting the certificate | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
share
Share your local development server via a public tunnel
- Usage:
$ buddy share [type] - Namespace: none
- Aliases: none
- Arguments:
[type]
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --port | Local port to share | value, required | - |
--server | Tunnel server URL | value, required | "api.localtunnel.dev" |
--subdomain | Request a specific subdomain | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
simulator:doctor
Whether an iOS simulator can run here, and what to do when it cannot
- Usage:
$ buddy simulator:doctor - Namespace:
simulator - Aliases: none
- Arguments: none
simulator:open
Open a URL in Mobile Safari on a simulator, booting one if needed
- Usage:
$ buddy simulator:open <url> - Namespace:
simulator - Aliases: none
- Arguments:
<url>
| Option | Description | Contract | Default |
|---|---|---|---|
--device | Which device, by name. Defaults to the newest iPhone. | value, required | "" |
--screenshot | Save a picture of the result here | value, required | "" |
--settle | How long to let the page load before the screenshot | value, required | 8 |
--fresh | Quit Mobile Safari first, so this is not the last page again | boolean, optional | false |
sms
SMS service management commands
- Usage:
$ buddy sms - Namespace: none
- Aliases: none
- Arguments: none
sms:add-phone
Add a phone to sandbox for testing
- Usage:
$ buddy sms:add-phone <phone> - Namespace:
sms - Aliases: none
- Arguments:
<phone>
sms:sandbox-list
List sandbox verified phone numbers
- Usage:
$ buddy sms:sandbox-list - Namespace:
sms - Aliases: none
- Arguments: none
sms:send
Send a test SMS
- Usage:
$ buddy sms:send <phone> [message] - Namespace:
sms - Aliases: none
- Arguments:
<phone>,[message]
| Option | Description | Contract | Default |
|---|---|---|---|
--template | Use a message template | value, required | - |
sms:setup
Initialize SMS infrastructure
- Usage:
$ buddy sms:setup - Namespace:
sms - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--dry-run | Show what would be done without making changes | boolean, optional | - |
sms:status
Show SMS service status
- Usage:
$ buddy sms:status - Namespace:
sms - Aliases: none
- Arguments: none
sms:verify
Verify a sandbox phone number
- Usage:
$ buddy sms:verify <id> <code> - Namespace:
sms - Aliases: none
- Arguments:
<id>,<code>
stack:install
Install a stack into your project
- Usage:
$ buddy stack:install <name> - Namespace:
stack - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Force overwrite existing files | boolean, optional | false |
--dry-run | Show what would be installed without making changes | boolean, optional | false |
--conflict | Conflict resolution strategy: skip, overwrite, or backup | value, required | "skip" |
-p, --project | Target a specific Stacks project | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy add calendar
buddy add table --force
buddy add calendar --conflict backup --verbose
buddy add table --dry-run
stack:list
List available and installed stacks
- Usage:
$ buddy stack:list - Namespace:
stack - Aliases:
stack:ls - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific Stacks project | value, required | - |
Examples:
buddy stack:list
stack:uninstall
Uninstall a stack from your project
- Usage:
$ buddy stack:uninstall <name> - Namespace:
stack - Aliases: none
- Arguments:
<name>
| Option | Description | Contract | Default |
|---|---|---|---|
--force | Force overwrite existing files | boolean, optional | false |
-p, --project | Target a specific Stacks project | value, required | - |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy stack:uninstall blog
buddy stack:uninstall blog --force
status
Check whether the application is in maintenance or coming-soon mode
- Usage:
$ buddy status - Namespace: none
- Aliases:
maintenance:status - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
stripe:setup
Sets up stripe products in the dashboard
- Usage:
$ buddy stripe:setup - Namespace:
stripe - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
telemetry
Manage telemetry settings
- Usage:
$ buddy telemetry - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--enable | Enable telemetry | boolean, optional | - |
--disable | Disable telemetry | boolean, optional | - |
--status | Show telemetry status | boolean, optional | - |
Examples:
buddy telemetry --status
buddy telemetry --enable
buddy telemetry --disable
test
Runs your test suite
- Usage:
$ buddy test - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-f, --feature | Runs your feature tests | boolean, optional | false |
-u, --unit | Runs your unit tests | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | true |
test:feature
Runs your feature tests
- Usage:
$ buddy test:feature - Namespace:
test - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
test:types
Typechecks your codebase
- Usage:
$ buddy test:types - Namespace:
test - Aliases:
typecheck - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
test:ui
Runs your test suite
- Usage:
$ buddy test:ui - Namespace:
test - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
test:unit
Runs your unit tests
- Usage:
$ buddy test:unit - Namespace:
test - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
tinker
Interactive REPL with Stacks framework preloaded
- Usage:
$ buddy tinker - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-e, --eval | Evaluate a single expression and exit | value, optional | "" |
--print | Evaluate, print, and exit | value, optional | "" |
--no-banner | Skip the welcome banner | boolean, optional, negated | false |
--preload | Additional modules to preload (comma-separated) | value, optional | "" |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
types:fix
Fix the generated types of & for your library/libraries (not yet implemented)
- Usage:
$ buddy types:fix - Namespace:
types - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
types:generate
Generate the types of & for your library/libraries
- Usage:
$ buddy types:generate - Namespace:
types - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
unlink:core
Go back to the installed @stacksjs/* packages
- Usage:
$ buddy unlink:core [...packages] - Namespace:
unlink - Aliases: none
- Arguments:
[packages...]
| Option | Description | Contract | Default |
|---|---|---|---|
--all | Unlink everything that was linked | boolean, optional | false |
Examples:
buddy unlink:core
unpublish:core
Drop a vendored storage/framework/core/
- Usage:
$ buddy unpublish:core [pkg] - Namespace:
unpublish - Aliases: none
- Arguments:
[pkg]
| Option | Description | Contract | Default |
|---|---|---|---|
--all | Unvendor the whole framework: remove storage/framework/core and resolve every @stacksjs package from the stacks dependency in package.json | boolean, optional | false |
--force | Delete the vendored source even when it has uncommitted changes | boolean, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
up
Bring the application out of maintenance mode
- Usage:
$ buddy up - Namespace: none
- Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy up
upgrade
Upgrade the Stacks framework to the latest version
- Usage:
$ buddy upgrade - Namespace: none
- Aliases:
update - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-V, --version | Install a specific version (e.g., 0.70.23) | value, required | - |
--canary | Upgrade to the latest canary (bleeding-edge main) build | boolean, optional | false |
--stable | Switch to the latest vetted stable release | boolean, optional | false |
--dry-run | Preview the upgrade (which dependencies would change) without writing or installing | boolean, optional | false |
-f, --force | Force re-download, bypassing cache and version checks | boolean, optional | false |
--from | Sync from a local stacks checkout (e.g. ~/Code/stacks). Skips GitHub. | value, required | - |
--no-postinstall | Skip post-sync hooks (auto-imports, bun install, migrate) | boolean, optional, negated | true |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade
buddy update
buddy upgrade --from ~/Code/stacks
buddy upgrade --version 0.70.23
buddy upgrade --dry-run
buddy upgrade --canary
buddy upgrade --stable
buddy upgrade --force
upgrade:all
Upgrade framework, dependencies, Bun, and binary
- Usage:
$ buddy upgrade:all - Namespace:
upgrade - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--canary | Upgrade to the latest canary (bleeding-edge main) build | boolean, optional | false |
-f, --force | Force re-download, bypassing cache and version checks | boolean, optional | false |
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade:all
upgrade:binary
Upgrade the stacks binary to the latest version
- Usage:
$ buddy upgrade:binary - Namespace:
upgrade - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade:binary
upgrade:bun
Upgrade Bun to the latest version
- Usage:
$ buddy upgrade:bun - Namespace:
upgrade - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade:bun
upgrade:dependencies
Upgrade your dependencies (pantry.yaml & package.json)
- Usage:
$ buddy upgrade:dependencies - Namespace:
upgrade - Aliases:
upgrade:deps - Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
-p, --project | Target a specific project | value, optional | false |
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade:dependencies
upgrade:shell
Upgrade the shell integration (currently only supports Oh My Zsh)
- Usage:
$ buddy upgrade:shell - Namespace:
upgrade - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--verbose | Enable verbose output | boolean, optional | false |
Examples:
buddy upgrade:shell
user:add
Create a user account (optionally an admin)
- Usage:
$ buddy user:add <email> - Namespace:
user - Aliases: none
- Arguments:
<email>
| Option | Description | Contract | Default |
|---|---|---|---|
--name | Display name. Defaults to the local part of the email. | value, required | - |
--password | Password. Generated and printed once if omitted. | value, required | - |
--role | Role to assign, e.g. admin. Seeds the default roles if the table is empty. | value, required | - |
--update | If the account already exists, reset its password and ensure the role | boolean, optional | false |
Examples:
buddy user:add chris@example.com --role admin
buddy user:add support@example.com --name Support --password s3cret
user:list
List the accounts that can sign in
- Usage:
$ buddy user:list - Namespace:
user - Aliases: none
- Arguments: none
| Option | Description | Contract | Default |
|---|---|---|---|
--limit | How many to show | value, required | "25" |
version
Retrieving Stacks build version
- Usage:
$ buddy version - Namespace: none
- Aliases: none
- Arguments: none