Project Schema
Project configuration defines deployable environments stored in projects/<id>.json.
Schema
json
{
"id": "string",
"name": "string",
"domain": "string",
"server_id": "string",
"base_path": "string",
"project_type": "string",
"component_ids": [],
"api": {},
"database": {},
"local_environment": {},
"remote_files": {},
"remote_logs": {},
"table_prefix": "string",
"protected_table_patterns": [],
"unlocked_table_patterns": [],
"shared_tables": [],
"table_groupings": [],
"sub_targets": [],
"component_groupings": [],
"cli_path": "string",
"tools": {},
"extensions": {}
}Fields
Required Fields
id(string): Unique project identifiername(string): Human-readable project namedomain(string): Project domain nameserver_id(string): ID of linked server configurationbase_path(string): Remote server base path for project files
Optional Fields
project_type(string): Project type identifier (e.g.,"wordpress")component_ids(array): List of component IDs linked to this projectapi(object): API client configurationbase_url(string): API base URLenabled(boolean): Whether API client is enabled
database(object): Database connection settingshost(string): Database hostport(number): Database port (default: 3306)name(string): Database nameuser(string): Database userpassword(string): Database password (stored in keychain)use_ssh_tunnel(boolean): Connect via SSH tunnel
local_environment(object): Local development environmentdomain(string): Local domainsite_path(string): Local site path
remote_files(object): Remote file managementpinned_files(array): List of frequently accessed filesid(string): Unique identifierpath(string): File path relative to base_path
remote_logs(object): Remote log managementpinned_logs(array): List of frequently accessed logsid(string): Unique identifierpath(string): Log path relative to base_pathtail_lines(number): Default line count for tail
table_prefix(string): Database table prefix (e.g.,"wp_")protected_table_patterns(array): Patterns for protected tables (cannot be deleted)unlocked_table_patterns(array): Patterns for unlocked tables (allow dangerous operations)shared_tables(array): List of shared table names across multi-site installationstable_groupings(array): Groupings for organizing tablesid(string): Unique grouping identifiername(string): Grouping namepatterns(array): Glob patterns matching tables in this groupmember_ids(array): Explicit table IDs in this groupsort_order(number): Display sort order
sub_targets(array): Sub-target paths for multi-component sitescomponent_groupings(array): Groupings for organizing componentsid(string): Unique grouping identifiername(string): Grouping namemember_ids(array): Component IDs in this group
cli_path(string): Project-scoped CLI path used by extension deploy install steps. On any given site the WP-CLI entrypoint is fixed (wp,studio wp, a Lando wrapper, etc.) and shared by every component deployed there, so this lives at the project layer instead of being repeated per component. Component-levelcomponent_overrides[id].cli_pathstill wins as the most-specific escape hatch. If unset, the deploy resolver auto-detects Studio sites (projects whosebase_pathis under~/Studio/) and defaults them to"studio wp".tools(object): Project-specific tool configurations- Keys are tool identifiers (e.g.,
"newsletter","bandcamp_scraper") - Values are tool-specific setting objects
- Keys are tool identifiers (e.g.,
extensions(object): Extension-specific settings for this project- Keys are extension IDs
- Values are extension setting objects
Example
json
{
"id": "extrachill",
"name": "Extra Chill",
"domain": "extrachill.com",
"server_id": "production",
"base_path": "/var/www/extrachill",
"project_type": "wordpress",
"component_ids": [
"extrachill-theme",
"extrachill-api"
],
"api": {
"base_url": "https://extrachill.com/wp-json",
"enabled": true
},
"database": {
"host": "localhost",
"port": 3306,
"name": "extrachill_db",
"user": "extrachill_user",
"use_ssh_tunnel": true
},
"local_environment": {
"domain": "extrachill.local",
"site_path": "/Users/dev/Sites/extrachill"
},
"remote_files": {
"pinned_files": [
{
"id": "wp-config",
"path": "wp-config.php"
}
]
},
"remote_logs": {
"pinned_logs": [
{
"id": "debug",
"path": "wp-content/debug.log",
"tail_lines": 100
}
]
},
"table_prefix": "wp_",
"table_groupings": [
{
"id": "wordpress-core",
"name": "WordPress Core",
"patterns": ["wp_*"],
"member_ids": [],
"sort_order": 0
}
],
"extensions": {
"wordpress": {
"settings": {
"wp_cli_path": "/usr/local/bin/wp"
}
}
}
}Storage Location
Projects are stored as individual JSON files under the OS config directory:
base_url(string): API base URLenabled(boolean): Whether API client is enabled
Security Notes
Database passwords should not be stored directly in project JSON files. Use the homeboy auth command to store credentials securely in the OS keychain. Homeboy automatically retrieves credentials during database operations.
Related
host(string): Database hostport(number): Database port (default: 3306)name(string): Database nameuser(string): Database userpassword(string): Database password (stored in keychain)use_ssh_tunnel(boolean): Connect via SSH tunnel