> For the complete documentation index, see [llms.txt](https://fusionauth.io/docs/llms.txt)

# Upgrade | FusionAuth Docs

Learn how to upgrade FusionAuth to a newer version.

# Upgrade

[Edit on GitHub](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/content/docs/get-started/download-and-install/upgrade.mdx)

[View Markdown](https://fusionauth.io/docs/get-started/download-and-install/upgrade.md)

This page explains how to upgrade FusionAuth to a newer version.

### Docker

To upgrade an instance of FusionAuth configured with a container management tool such as Docker Desktop, OrbStack, or Podman:

1.  Stop the instance:
    
    ```shell-session
    $ docker compose down
    ```
    
2.  Modify the `docker-compose.yml` file to point to the version of FusionAuth you want. The following command will upgrade you to the latest version:
    
    ```shell-session
    $ docker pull fusionauth/fusionauth-app:latest
    ```
    
    For a full list of available tags, see [fusionauth-app on Docker Hub](https://hub.docker.com/r/fusionauth/fusionauth-app).
    
3.  Start your instance:
    
    ```shell-session
    $ docker compose up -d
    ```
    
4.  Open the [System -> About page in the Admin UI](http://localhost:9011/admin/system/about/) to check your instance's version of FusionAuth.
    

### `fusionauth-app` on macOS and Linux

1.  First, shut down FusionAuth:
    
    ```shell-session
    $ <FUSIONAUTH_HOME>/bin/shutdown.sh
    ```
    
2.  Then, from the *parent* directory of `FUSIONAUTH_HOME`, run the FastPath install command. For example, if `FUSIONAUTH_HOME` is `/home/example/dev/fusionauth`, run the command from `/home/example/dev`:
    
    ```shell-session
    $ curl -fsSL https://raw.githubusercontent.com/FusionAuth/fusionauth-install/master/install.sh | bash -s && \
    ```
    
3.  Start FusionAuth:
    
    ```shell-session
    $ <FUSIONAUTH_HOME>/bin/startup.sh
    ```
    

### Homebrew install on macOS

If you initially installed FusionAuth using Homebrew, you can also use Homebrew to upgrade to the latest version of FusionAuth.

To upgrade FusionAuth using `brew`, follow the steps below:

1.  Stop `fusionauth-app` using Homebrew services:
    
    ```shell-session
    $ brew services stop fusionauth-app
    ```
    
2.  Upgrade the version of `fusionauth-app`:
    
    ```shell-session
    $ brew upgrade fusionauth-app
    ```
    
3.  Start `fusionauth-app` with Homebrew services:
    
    ```shell-session
    $ brew services start fusionauth-app
    ```
    

### `fusionauth-app` on Windows

1.  Terminate the running FusionAuth App and Search services:
    
    ```powershell
    <FUSIONAUTH_HOME>\bin\shutdown.ps1
    ```
    
2.  Then, from the *parent* directory of `FUSIONAUTH_HOME`, run the FastPath install command. For example, if `FUSIONAUTH_HOME` is `\Users\example\dev\fusionauth`, run this command from `\Users\example\dev`:
    
    ```powershell
    Invoke-WebRequest -UseBasicParsing -Uri https://raw.githubusercontent.com/FusionAuth/fusionauth-install/main/install.ps1 | iex
    ```
    
3.  Start FusionAuth:
    
    ```powershell
    <FUSIONAUTH_HOME>\bin\startup.ps1
    ```
    

## Migrations

If there were database migrations required, what happens on an upgrade depends on two settings: the runtime mode and the silent mode.

If silent mode is set to `true`, FusionAuth will automatically migrate your database to the latest schema version.

If silent mode is `false` and the runtime mode is set to `development`, Maintenance mode will appear when you access any URL hosted by FusionAuth. Follow the prompts to complete the migrations.

In all other cases the migrations will not be applied, and you'll have to perform them yourself. If you want to manage your own database upgrades, performing the SQL migrations out of band with another tool or process is a good option.

*When Are Database Migrations Applied*

| Runtime Mode | Silent Mode | Migration Behavior |
| --- | --- | --- |
| `development` | `true` | Migration applied automatically |
| `development` | `false` | Maintenance mode UI displayed, user prompted to run migrations |
| `production` | `true` | Migration applied automatically |
| `production` | `false` | Migration never applied by FusionAuth, must be applied out of band |

See the [configuration reference](https://fusionauth.io/docs/reference/configuration.md) or the [silent mode guide](https://fusionauth.io/docs/get-started/download-and-install/reference/silent-mode.md) for more information. To apply the database migrations out of band see the [database upgrade](https://fusionauth.io/docs/operate/deploy/upgrade.md#downtime-and-database-migrations) documentation.

## Docker `latest` Tag

The Docker Compose file references the `latest` tag, but that tag is not dynamic. It is only the latest at a point in time. To get the most recently released image, you have a couple of options:

*   Pull the latest image with this command: `docker pull fusionauth/fusionauth-app:latest` or `docker compose pull` and recreate your deployment with `docker compose up -d` which will recreate every container where a new image is available.
*   Edit the Docker Compose file to specify a specific version. This is a good idea for a production deployment. Run `docker compose pull` you can only pull the specified image, or just run `docker compose up -d` which will pull the image and recreate the container at the same time.
*   Remove all images with `docker rmi <IMAGE ID>` selected from the list of IMAGE IDs which you can show with `docker images`. This requires that the image isn't used and therefore may prompt you to remove containers using it. Since FusionAuth stores all state in the database, and for docker you use volumes to persist data, you can safely remove the containers. After that you can use `docker compose pull`, `docker compose build` and `docker compose up -d` accordingly to get images specified the in the `docker-compose.yml`.

Use `docker image prune` to remove all unused images after upgrading.