{
  "manifest_version": "1.0.0",
  "template": {
    "id": "28cac805-c550-4a72-a669-d08c7562713b",
    "slug": "passbolt",
    "name": "Passbolt | Open Source Team Password Manager",
    "description": "Self Host Passbolt. Team password vault with end-to-end encryption",
    "url": "https://railway.com/deploy/passbolt",
    "upstream": {
      "image": "passbolt/passbolt:latest-ce"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "MariaDB",
      "source": {
        "image": "mariadb:10.11"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/mysql",
      "http": false
    },
    {
      "name": "Passbolt",
      "source": {
        "image": "passbolt/passbolt:latest-ce"
      },
      "needs_volume": true,
      "volume_mount_path": "/data/passbolt",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "MYSQL_USER",
      "service": "MariaDB",
      "description": "Application database user",
      "secret": false,
      "strategy": "default",
      "default": "passbolt"
    },
    {
      "key": "MYSQL_DATABASE",
      "service": "MariaDB",
      "description": "Application database name",
      "secret": false,
      "strategy": "default",
      "default": "passbolt"
    },
    {
      "key": "MYSQL_PASSWORD",
      "service": "MariaDB",
      "description": "Application database password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "MariaDB",
      "description": "Run as root for volume permissions",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "MYSQL_ROOT_PASSWORD",
      "service": "MariaDB",
      "description": "MariaDB root password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "Passbolt",
      "description": "HTTP listening port",
      "secret": false,
      "strategy": "default",
      "default": "80"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "Passbolt",
      "description": "Run as root for volume permissions",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "APP_FULL_BASE_URL",
      "service": "Passbolt",
      "description": "Public HTTPS URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "EMAIL_DEFAULT_FROM",
      "service": "Passbolt",
      "description": "From address — set after deploy (e.g. no-reply@yourdomain.com)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "PASSBOLT_KEY_EMAIL",
      "service": "Passbolt",
      "description": "GPG server key email",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PASSBOLT_SSL_FORCE",
      "service": "Passbolt",
      "description": "Disable SSL redirect (Railway TLS proxy)",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "EMAIL_DEFAULT_FROM_NAME",
      "service": "Passbolt",
      "description": "From display name",
      "secret": false,
      "strategy": "default",
      "default": "Passbolt"
    },
    {
      "key": "DATASOURCES_DEFAULT_HOST",
      "service": "Passbolt",
      "description": "MariaDB internal host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DATASOURCES_DEFAULT_PORT",
      "service": "Passbolt",
      "description": "MariaDB port",
      "secret": false,
      "strategy": "default",
      "default": "3306"
    },
    {
      "key": "EMAIL_TRANSPORT_DEFAULT_TLS",
      "service": "Passbolt",
      "description": "Enable TLS encryption",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATASOURCES_DEFAULT_DATABASE",
      "service": "Passbolt",
      "description": "Database name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATASOURCES_DEFAULT_PASSWORD",
      "service": "Passbolt",
      "description": "Database password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATASOURCES_DEFAULT_USERNAME",
      "service": "Passbolt",
      "description": "Database username",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "EMAIL_TRANSPORT_DEFAULT_HOST",
      "service": "Passbolt",
      "description": "SMTP server (e.g. smtp.gmail.com, smtp.sendgrid.net)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "EMAIL_TRANSPORT_DEFAULT_PORT",
      "service": "Passbolt",
      "description": "SMTP port (587 TLS, 465 SSL)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "PASSBOLT_REGISTRATION_PUBLIC",
      "service": "Passbolt",
      "description": "Disable public registration",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "EMAIL_TRANSPORT_DEFAULT_PASSWORD",
      "service": "Passbolt",
      "description": "SMTP password / app password — set after deploy",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "EMAIL_TRANSPORT_DEFAULT_USERNAME",
      "service": "Passbolt",
      "description": "SMTP username — set after deploy",
      "secret": false,
      "strategy": "ask_user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "passbolt"
      }
    },
    "cli": "railway deploy --template passbolt",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "28cac805-c550-4a72-a669-d08c7562713b",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "454b5c6e-4491-41c1-8b31-0e8d44f33251": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mariadb.svg",
                  "name": "MariaDB",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mariadb:10.11"
                  },
                  "variables": {
                    "MYSQL_USER": {
                      "isOptional": false,
                      "description": "Application database user",
                      "defaultValue": "passbolt"
                    },
                    "MYSQL_DATABASE": {
                      "isOptional": false,
                      "description": "Application database name",
                      "defaultValue": "passbolt"
                    },
                    "MYSQL_PASSWORD": {
                      "isOptional": false,
                      "description": "Application database password",
                      "defaultValue": "{{MYSQL_PASSWORD}}"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Run as root for volume permissions",
                      "defaultValue": "0"
                    },
                    "MYSQL_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "MariaDB root password",
                      "defaultValue": "{{MYSQL_ROOT_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "454b5c6e-4491-41c1-8b31-0e8d44f33251": {
                      "mountPath": "/var/lib/mysql"
                    }
                  }
                },
                "8a876d29-c04f-4998-840d-6784c384a091": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/passbolt.svg",
                  "name": "Passbolt",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'mkdir -p /data/passbolt/gpg /data/passbolt/jwt && rm -rf /etc/passbolt/gpg /etc/passbolt/jwt && ln -sfn /data/passbolt/gpg /etc/passbolt/gpg && ln -sfn /data/passbolt/jwt /etc/passbolt/jwt && chmod -R 777 /data/passbolt && /usr/bin/wait-for.sh -t 60 $DATASOURCES_DEFAULT_HOST:3306 -- /docker-entrypoint.sh'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "passbolt/passbolt:latest-ce"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP listening port",
                      "defaultValue": "80"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Run as root for volume permissions",
                      "defaultValue": "0"
                    },
                    "APP_FULL_BASE_URL": {
                      "isOptional": false,
                      "description": "Public HTTPS URL",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "EMAIL_DEFAULT_FROM": {
                      "isOptional": false,
                      "description": "From address — set after deploy (e.g. no-reply@yourdomain.com)",
                      "defaultValue": "{{EMAIL_DEFAULT_FROM}}"
                    },
                    "PASSBOLT_KEY_EMAIL": {
                      "isOptional": false,
                      "description": "GPG server key email",
                      "defaultValue": "{{PASSBOLT_KEY_EMAIL}}"
                    },
                    "PASSBOLT_SSL_FORCE": {
                      "isOptional": false,
                      "description": "Disable SSL redirect (Railway TLS proxy)",
                      "defaultValue": "false"
                    },
                    "EMAIL_DEFAULT_FROM_NAME": {
                      "isOptional": false,
                      "description": "From display name",
                      "defaultValue": "Passbolt"
                    },
                    "DATASOURCES_DEFAULT_HOST": {
                      "isOptional": false,
                      "description": "MariaDB internal host",
                      "defaultValue": "${{MariaDB.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DATASOURCES_DEFAULT_PORT": {
                      "isOptional": false,
                      "description": "MariaDB port",
                      "defaultValue": "3306"
                    },
                    "EMAIL_TRANSPORT_DEFAULT_TLS": {
                      "isOptional": false,
                      "description": "Enable TLS encryption",
                      "defaultValue": "true"
                    },
                    "DATASOURCES_DEFAULT_DATABASE": {
                      "isOptional": false,
                      "description": "Database name",
                      "defaultValue": "${{MariaDB.MYSQL_DATABASE}}"
                    },
                    "DATASOURCES_DEFAULT_PASSWORD": {
                      "isOptional": false,
                      "description": "Database password",
                      "defaultValue": "${{MariaDB.MYSQL_PASSWORD}}"
                    },
                    "DATASOURCES_DEFAULT_USERNAME": {
                      "isOptional": false,
                      "description": "Database username",
                      "defaultValue": "${{MariaDB.MYSQL_USER}}"
                    },
                    "EMAIL_TRANSPORT_DEFAULT_HOST": {
                      "isOptional": false,
                      "description": "SMTP server (e.g. smtp.gmail.com, smtp.sendgrid.net)",
                      "defaultValue": "{{EMAIL_TRANSPORT_DEFAULT_HOST}}"
                    },
                    "EMAIL_TRANSPORT_DEFAULT_PORT": {
                      "isOptional": false,
                      "description": "SMTP port (587 TLS, 465 SSL)",
                      "defaultValue": "{{EMAIL_TRANSPORT_DEFAULT_PORT}}"
                    },
                    "PASSBOLT_REGISTRATION_PUBLIC": {
                      "isOptional": false,
                      "description": "Disable public registration",
                      "defaultValue": "false"
                    },
                    "EMAIL_TRANSPORT_DEFAULT_PASSWORD": {
                      "isOptional": false,
                      "description": "SMTP password / app password — set after deploy",
                      "defaultValue": "{{EMAIL_TRANSPORT_DEFAULT_PASSWORD}}"
                    },
                    "EMAIL_TRANSPORT_DEFAULT_USERNAME": {
                      "isOptional": false,
                      "description": "SMTP username — set after deploy",
                      "defaultValue": "{{EMAIL_TRANSPORT_DEFAULT_USERNAME}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "8a876d29-c04f-4998-840d-6784c384a091": {
                      "mountPath": "/data/passbolt"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 2,
    "needs_volume": true
  },
  "generated_at": "2026-09-22T04:14:41.730Z",
  "generator_version": "0.1.0"
}
