--- title: Deployment & Branching --- Deploying your app makes it live and accessible to users. Usually, you deploy an app to at least two environments: a production environment for users and (one or multiple) staging or preview environments for developers. Supabase provides several options for environment management and deployment. ## Environment management You can maintain separate development, staging, and production environments for Supabase: - **Development**: Develop with a local Supabase stack using the [Supabase CLI](/docs/guides/local-development). - **Staging**: Use [branching](/docs/guides/deployment/branching) to create staging or preview environments. You can use persistent branches for a long-lived staging setup, or ephemeral branches for short-lived previews (which are often tied to a pull request). - **Production**: If you have branching enabled, you can use the Supabase GitHub integration to automatically push your migration files when you merge a pull request. Alternatively, you can set up your own continuous deployment pipeline using the Supabase CLI. Read the [self-hosting guides](/docs/guides/self-hosting) for instructions on hosting your own Supabase stack. ## Deployment You can automate deployments using: - The [Supabase GitHub integration](/dashboard/project/_/settings/integrations) (with branching enabled) - The [Supabase CLI](/docs/guides/local-development) in your own continuous deployment pipeline - The [Supabase Terraform provider](/docs/guides/deployment/terraform)