project
pfy project lists, creates, reads, updates, and deletes projects on the Manager. A project is the top-level unit: tenants, applications, environments, and language packs all belong to one.
Synopsis
pfy project <subcommand> [flags]Aliases: p
Description
Projects are the highest level of organization in ProductifyFW. Each project can contain multiple tenants and serves as a complete product or service unit.
Subcommands
list- List all projectscreate- Create a new projectget- Get project details by slugupdate- Update a project's name or descriptiondelete- Delete a project (prompts for confirmation; requires--yeswith--ci)
project list
List all projects you have access to.
Usage
pfy project list [flags]Example
pfy project listOutput:
Projects:
- My SaaS Platform (my-saas)
- E-commerce Store (ecommerce)
2 projects--limit <n> returns exactly n rows; --offset <n> skips the first n. Without --limit, every project is fetched. -o json prints the list as JSON.
Verbose output:
pfy --verbose project listConnecting to ProductifyFW manager...
Fetching projects list...
Found 2 project(s)
Projects:
- My SaaS Platform (my-saas)
ID: 01234567-89ab-cdef-0123-456789abcdef
- E-commerce Store (ecommerce)
ID: 12345678-9abc-def0-1234-56789abcdef0
2 projectsproject create
Create a new project with a unique slug.
Usage
pfy project create --slug <slug> --name <name> [--description <desc>]Flags
| Flag | Required | Description |
|---|---|---|
--slug | Yes | Project slug (unique identifier, lowercase, hyphen-separated) |
--name | Yes | Project display name |
--description | No | Project description |
Examples
Basic creation:
pfy project create \
--slug my-project \
--name "My Project"With description:
pfy project create \
--slug my-saas \
--name "My SaaS Platform" \
--description "A multi-tenant SaaS application for customer management"Output:
Project created successfully: My SaaS Platform (my-saas)Verbose output:
pfy --verbose project create \
--slug my-saas \
--name "My SaaS Platform" \
--description "A multi-tenant SaaS application"Connecting to ProductifyFW manager...
Creating project with slug 'my-saas'...
Project created successfully: My SaaS Platform (my-saas)
ID: 01234567-89ab-cdef-0123-456789abcdefproject get
Retrieve detailed information about a specific project.
Usage
pfy project get --slug <slug>Flags
| Flag | Required | Description |
|---|---|---|
--slug | Yes | Project slug |
Example
pfy project get --slug my-saasOutput:
Project: My SaaS Platform (my-saas)
ID: 01234567-89ab-cdef-0123-456789abcdefget resolves by slug only. To look a project up by ID use pfy sync --project <id> or pfy -o json project list.
project update
Change a project's name and/or description.
Usage
pfy project update <slug|id> [--name <name>] [--description <desc>]| Flag | Description |
|---|---|
--slug | Target slug (or pass it positionally). A UUID value is treated as an ID |
--id | Target by ID explicitly (for the rare slug that looks like a UUID) |
--name | New project name |
--description | New project description |
At least one of --name or --description is required.
pfy project update my-saas --name "My SaaS Platform v2"Project updated: My SaaS Platform v2 (my-saas)project delete
Delete a project.
Usage
pfy project delete <slug|id> [--yes]| Flag | Aliases | Description |
|---|---|---|
--yes | -y | Skip the confirmation prompt. Required under --ci or when stdin is not a terminal |
On a terminal you must type the slug back to confirm:
This permanently deletes project "my-saas". Type "my-saas" to confirm: my-saas
Deleted project My SaaS Platform (my-saas)Without a terminal (or with --ci) and without --yes:
Error: refusing to delete project "my-saas" without confirmation: re-run with --yes (required under --ci or without a TTY)GraphQL Operations
The project commands use these GraphQL operations:
GetProjects
query GetProjects(
$filters: [FilterInput!]
$order: [OrderInput!]
$pagination: PaginationInput
) {
projects(filters: $filters, order: $order, pagination: $pagination) {
id
slug
name
}
}GetProject
query GetProject($slug: String!) {
project(slug: $slug) {
id
slug
name
}
}CreateProject
mutation CreateProject($input: CreateProjectInput!) {
createProject(input: $input) {
id
slug
name
}
}Common Workflows
Create a complete project structure
# Create project
pfy project create \
--slug my-app \
--name "My Application" \
--description "Production application"
# Get project ID
PROJECT_ID=$(pfy project get --slug my-app | grep "ID:" | awk '{print $2}')
# Create development tenant
pfy tenant create \
--project-id $PROJECT_ID \
--slug dev \
--name "Development"
# Create production tenant
pfy tenant create \
--project-id $PROJECT_ID \
--slug prod \
--name "Production"List and filter projects
# List all projects
pfy project list
# With verbose details (adds ID lines)
pfy --verbose project list
# Machine-readable
pfy -o json project list | jq -r '.[].slug'Verify project exists
if pfy project get --slug my-project &> /dev/null; then
echo "Project exists"
else
echo "Project not found"
fiBest Practices
- Use descriptive slugs that are memorable and URL-friendly
- Include a description of the project's purpose
- Follow one naming convention across projects
- Use lowercase and hyphens in slugs:
my-project-name
Error Handling
Errors from the Manager are printed after a prefix naming the operation (failed to create project:, failed to get project:, ...); the text after the prefix is the Manager's own message. Typical causes:
- Slug already taken on
create: choose another slug orupdatethe existing project. - Project not found on
get/update/delete: check the slug withpfy project list. - Invalid slug on
create: use lowercase letters, digits, and hyphens.
A token rejected or cannot reach manager error is about your connection, not the project; see Configuration.
See Also
- tenant - Manage tenants within projects
- Commands - All available commands
- Configuration - Configure CLI settings