application
Manage applications within tenants for deployable instances.
Synopsis
pfy application <subcommand> [flags]Aliases: app
Description
Applications are deployable instances within a tenant. Each application has its own configuration, modules, themes, and version management.
Subcommands
list- List all applications in a tenantcreate- Create a new applicationpromote- Promote an application version to another tenantcopy- Copy an application to another tenantupdate-version- Update the version of an application
application list
List all applications within a specific tenant.
Usage
pfy application list --tenant <tenant-slug> [flags]Flags
| Flag | Required | Description |
|---|---|---|
--tenant | Yes | Tenant slug to list applications from |
Example
pfy application list --tenant productionOutput:
Applications:
- Web App (web-app) v1.2.3: Main customer-facing application
- Admin Portal (admin) v2.0.1: Internal administration interface
- API Gateway (api) v1.0.0: REST API endpointVerbose output:
pfy --verbose application list --tenant productionConnecting to ProductifyFW manager...
Fetching applications for tenant 'production'...
Found 3 application(s)
Applications:
- Web App (web-app) v1.2.3: Main customer-facing application
ID: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
- Admin Portal (admin) v2.0.1: Internal administration interface
ID: bbbbbbbb-cccc-dddd-eeee-ffffffffffff
- API Gateway (api) v1.0.0: REST API endpoint
ID: cccccccc-dddd-eeee-ffff-000000000000application create
Create a new application within a tenant.
Usage
pfy application create \
--tenant-id <id> \
--slug <slug> \
--name <name> \
[--version <version>] \
[--description <desc>]Flags
| Flag | Required | Description |
|---|---|---|
--tenant-id | Yes | Tenant ID (not slug) |
--slug | Yes | Application slug (unique within tenant) |
--name | Yes | Application display name |
--version | No | Initial version (default: "0.1.0") |
--description | No | Application description |
Examples
Basic creation:
pfy application create \
--tenant-id 33333333-4444-5555-6666-777777777777 \
--slug web-app \
--name "Web Application"With version and description:
pfy application create \
--tenant-id 33333333-4444-5555-6666-777777777777 \
--slug admin-portal \
--name "Admin Portal" \
--version "1.0.0" \
--description "Internal administration interface for managing tenant data"Output:
Application created successfully: Admin Portal (admin-portal) v1.0.0Verbose output:
pfy --verbose application create \
--tenant-id 33333333-4444-5555-6666-777777777777 \
--slug admin-portal \
--name "Admin Portal" \
--version "1.0.0" \
--description "Internal administration interface"Connecting to ProductifyFW manager...
Creating application 'admin-portal' v1.0.0 in tenant ID '33333333-4444-5555-6666-777777777777'...
Application created successfully: Admin Portal (admin-portal) v1.0.0
ID: bbbbbbbb-cccc-dddd-eeee-ffffffffffffWorkflow Example
Creating a Complete Application Stack
# 1. Get the tenant ID
TENANT_ID=$(pfy tenant list --project my-saas | grep "Production" | awk '{print $NF}')
# 2. Create main application
pfy application create \
--tenant-id $TENANT_ID \
--slug web-app \
--name "Web Application" \
--version "1.0.0" \
--description "Customer-facing web application"
# 3. Create API gateway
pfy application create \
--tenant-id $TENANT_ID \
--slug api \
--name "API Gateway" \
--version "1.0.0" \
--description "REST API for mobile and third-party integrations"
# 4. List all applications to verify
pfy application list --tenant productionGraphQL Operations
GetApplications
query GetApplications(
$tenantSlug: String!
$filters: [FilterInput!]
$order: [OrderInput!]
$pagination: PaginationInput
) {
applications(
tenantSlug: $tenantSlug
filters: $filters
order: $order
pagination: $pagination
) {
id
slug
name
description
version
}
}CreateApplication
mutation CreateApplication($tenantId: ID!, $input: CreateApplicationInput!) {
createApplication(tenantId: $tenantId, input: $input) {
id
slug
name
description
version
}
}Input Type:
input CreateApplicationInput {
slug: String!
name: String!
description: String
version: String
}application promote
Promote an application version from one tenant to another.
Usage
pfy application promote \
--application-id <id> \
--target-tenant-id <id> \
--version <version>Flags
| Flag | Aliases | Required | Description |
|---|---|---|---|
--application-id | --app-id | Yes | Source application ID |
--target-tenant-id | --to-tenant | Yes | Target tenant ID to promote to |
--version | Yes | Version to promote |
Description
The promote command creates a new application instance in the target tenant with the specified version from the source application. This is useful for promoting tested application versions from development to staging or production environments.
Examples
Promote from dev to staging:
# Get application ID from dev tenant
APP_ID=$(pfy application list --tenant dev | grep "web-app" | awk '{print $NF}')
# Get staging tenant ID
STAGING_TENANT_ID=$(pfy tenant list --project my-project | grep "staging" | awk '{print $NF}')
# Promote version 1.2.0 to staging
pfy application promote \
--app-id $APP_ID \
--to-tenant $STAGING_TENANT_ID \
--version 1.2.0Promote to production:
pfy application promote \
--application-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \
--target-tenant-id 33333333-4444-5555-6666-777777777777 \
--version 2.0.0Output:
Application promoted successfully: Web Application (web-app) v2.0.0application copy
Copy an application from one tenant to another with a new slug and optional customizations.
Usage
pfy application copy \
--source-application-id <id> \
--target-tenant-id <id> \
--slug <slug> \
[--name <name>] \
[--version <version>]Flags
| Flag | Aliases | Required | Description |
|---|---|---|---|
--source-application-id | --from-app | Yes | Source application ID to copy from |
--target-tenant-id | --to-tenant | Yes | Target tenant ID to copy to |
--slug | Yes | Application slug in target tenant | |
--name | No | Application name (defaults to source name) | |
--version | No | Version (defaults to source version) |
Examples
Basic copy:
pfy application copy \
--from-app aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \
--to-tenant 44444444-5555-6666-7777-888888888888 \
--slug web-app-copyCopy with custom name and version:
pfy application copy \
--source-application-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \
--target-tenant-id 44444444-5555-6666-7777-888888888888 \
--slug customer-portal \
--name "Customer Portal" \
--version 1.0.0application update-version
Update the version number of an existing application.
Usage
pfy application update-version \
--application-id <id> \
--version <version>Flags
| Flag | Aliases | Required | Description |
|---|---|---|---|
--application-id | --app-id | Yes | Application ID |
--version | Yes | New version number |
Examples
Update to new version:
pfy application update-version \
--app-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \
--version 1.3.0Semantic version bump:
# Patch version
pfy application update-version --app-id $APP_ID --version 1.2.1
# Minor version
pfy application update-version --app-id $APP_ID --version 1.3.0
# Major version
pfy application update-version --app-id $APP_ID --version 2.0.0Version Promotion Workflow
Development to Production Pipeline
# 1. Create application in dev tenant
DEV_TENANT_ID=$(pfy tenant list --project my-saas | grep "dev" | awk '{print $NF}')
pfy application create \
--tenant-id $DEV_TENANT_ID \
--slug web-app \
--name "Web Application" \
--version 0.1.0
# 2. Get application ID
APP_ID=$(pfy application list --tenant dev | grep "web-app" | awk '{print $NF}')
# 3. Update version after testing
pfy application update-version --app-id $APP_ID --version 1.0.0
# 4. Promote to staging
STAGING_TENANT_ID=$(pfy tenant list --project my-saas | grep "staging" | awk '{print $NF}')
pfy application promote \
--app-id $APP_ID \
--to-tenant $STAGING_TENANT_ID \
--version 1.0.0
# 5. After staging approval, promote to production
PROD_TENANT_ID=$(pfy tenant list --project my-saas | grep "prod" | awk '{print $NF}')
pfy application promote \
--app-id $APP_ID \
--to-tenant $PROD_TENANT_ID \
--version 1.0.0Multi-Tenant Deployment
# Create base application
BASE_APP_ID="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
# Copy to multiple customer tenants
for CUSTOMER in customer-a customer-b customer-c; do
TENANT_ID=$(pfy tenant list --project my-saas | grep "$CUSTOMER" | awk '{print $NF}')
pfy application copy \
--from-app $BASE_APP_ID \
--to-tenant $TENANT_ID \
--slug web-app \
--name "Web Application" \
--version 1.0.0
doneGraphQL Operations for New Commands
PromoteApplication
mutation PromoteApplication($input: PromoteApplicationInput!) {
promoteApplication(input: $input) {
id
slug
name
description
version
}
}Input Type:
input PromoteApplicationInput {
applicationId: ID!
targetTenantId: ID!
version: String!
}CopyApplication
mutation CopyApplication($input: CopyApplicationInput!) {
copyApplication(input: $input) {
id
slug
name
description
version
}
}Input Type:
input CopyApplicationInput {
sourceApplicationId: ID!
targetTenantId: ID!
slug: String!
name: String
version: String
}UpdateApplicationVersion
Uses the existing UpdateApplication mutation:
mutation UpdateApplication($id: ID!, $input: UpdateApplicationInput!) {
updateApplication(id: $id, input: $input) {
id
slug
name
description
version
}
}