snow app deploy

Uploads your project source to Snowflake, builds it remotely, and starts or upgrades the Application Service. This is the primary command for shipping changes to a Snowflake App Runtime project.

When the project snowflake.yml contains a snowflake-app entity, snow app deploy runs the Snowflake App Runtime flow (upload, build, deploy). When it contains a Native App entity, the command runs the Native App flow instead.

Syntax

snow app deploy
  --upload-only
  --build-only
  --deploy-only
  --connection <connection>
  --host <host>
  --port <port>
  --account <account>
  --user <user>
  --password <password>
  --authenticator <authenticator>
  --workload-identity-provider <workload_identity_provider>
  --private-key-file <private_key_file>
  --token <token>
  --token-file-path <token_file_path>
  --database <database>
  --schema <schema>
  --role <role>
  --warehouse <warehouse>
  --temporary-connection
  --mfa-passcode <mfa_passcode>
  --enable-diag
  --diag-log-path <diag_log_path>
  --diag-allowlist-path <diag_allowlist_path>
  --format <format>
  --verbose
  --debug
  --silent
  --enhanced-exit-codes

Arguments

None

Options

--upload-only

Re-upload source files without rebuilding or redeploying. Only one of --upload-only, --build-only, or --deploy-only can be used at a time. Default: False.

--build-only

Re-trigger the remote build without re-uploading or redeploying. Only one of --upload-only, --build-only, or --deploy-only can be used at a time. Default: False.

--deploy-only

Create or upgrade the Application Service without re-uploading or rebuilding. Only one of --upload-only, --build-only, or --deploy-only can be used at a time. Default: False.

--connection, -c, --environment TEXT

Name of the connection, as defined in your config.toml file. Default: default.

--host TEXT

Host address for the connection. Overrides the value specified for the connection.

--port INTEGER

Port for the connection. Overrides the value specified for the connection.

--account, --accountname TEXT

Name assigned to your Snowflake account. Overrides the value specified for the connection.

--user, --username TEXT

Username to connect to Snowflake. Overrides the value specified for the connection.

--password TEXT

Snowflake password. Overrides the value specified for the connection.

--authenticator TEXT

Snowflake authenticator. Overrides the value specified for the connection.

--workload-identity-provider TEXT

Workload identity provider (AWS, AZURE, GCP, OIDC). Overrides the value specified for the connection.

--private-key-file, --private-key-path TEXT

Snowflake private key file path. Overrides the value specified for the connection.

--token TEXT

OAuth token to use when connecting to Snowflake.

--token-file-path TEXT

Path to file with an OAuth token to use when connecting to Snowflake.

--database, --dbname TEXT

Database to use. Overrides the value specified for the connection.

--schema, --schemaname TEXT

Database schema to use. Overrides the value specified for the connection.

--role, --rolename TEXT

Role to use. Overrides the value specified for the connection.

--warehouse TEXT

Warehouse to use. Overrides the value specified for the connection.

--temporary-connection, -x

Uses a connection defined with command-line parameters, instead of one defined in config. Default: False.

--mfa-passcode TEXT

Token to use for multi-factor authentication (MFA).

--enable-diag

Whether to generate a connection diagnostic report. Default: False.

--diag-log-path TEXT

Path for the generated report. Defaults to system temporary directory.

--diag-allowlist-path TEXT

Path to a JSON file that contains allowlist parameters.

--format [TABLE|JSON|JSON_EXT|CSV]

Specifies the output format. Default: TABLE.

--verbose, -v

Displays log entries for log levels info and higher. Default: False.

--debug

Displays log entries for log levels debug and higher; debug logs contain additional information. Default: False.

--silent

Turns off intermediate output to console. Default: False.

--enhanced-exit-codes

Differentiate exit error codes based on failure type. Default: False.

--help

Displays the help text for this command.

Usage notes

Running snow app deploy with no phase flags performs the full pipeline:

  1. Upload: Syncs local source files to an internal stage.
  2. Build: Triggers the managed build service using managed compute pools and produces an immutable package version for your app.
  3. Deploy: Creates or upgrades the Application Service from the build output.

We recommend account administrator setup before team deploys to shared account defaults (for example SNOWFLAKE_APPS). If account defaults aren’t configured, snow app setup may resolve to a personal database instead; see Getting started with Snowflake App Runtime.

Run snow app setup to generate snowflake.yml for your deploy destination.

If a deploy fails partway through, retry just the failed phase:

  • snow app deploy --upload-only: Re-upload source files without rebuilding or redeploying.
  • snow app deploy --build-only: Re-trigger the build without re-uploading or redeploying.
  • snow app deploy --deploy-only: Create or upgrade the service without re-uploading or rebuilding.

Only one phase flag can be used at a time.

snow app deploy is not idempotent. Running it again restarts the selected phase sequence. If upload and build have already succeeded, use --deploy-only instead of rerunning the full pipeline.

For operating and debugging after deployment:

Troubleshooting deploy and build failures

Build runs too long or is canceled

Remote builds have a maximum running time measured from when the builder pod becomes ready (containers running), not from when the build job is submitted. Queueing, scheduling, image pull, and container startup don’t count toward the limit. The default maximum is about 12 hours. If a build exceeds the limit, Snowflake can cancel the job and snow app deploy fails. Retry with --build-only after you fix long-running install or build steps in your project, or split work so each build finishes within the limit.

Invalid app.yml during build

When your uploaded source includes app.yml, Snowflake validates the manifest during the build phase. Syntax errors, invalid profile.icon paths, or other manifest problems fail the build with an error similar to:

Application service manifest (app.yaml) cannot be parsed. '<details>'.

Fix the manifest locally, then rerun snow app deploy --build-only (or the full deploy if upload also changed).

Examples

Deploy the full pipeline (upload, build, deploy):

snow app deploy

Re-trigger only the build after fixing a build error:

snow app deploy --build-only