Official cross-platform tool by ST, with GUI and CLI versions.
Supports all bootloader protocols (UART, I2C, SPI, USB DFU, CAN). Supports OTP memory and option bytes.
https://www.st.com/en/development-tools/stm32cubeprog.html
Windows tool by ST.
It comes with a command-line version and source code.
https://www.st.com/en/development-tools/flasher-stm32.html
This is replaced by Stm32CubProgrammer (see above).
https://www.st.com/en/development-tools/stsw-link004.html
Open source flashing tool in C.
Supports UART and SPI, and covers many STM32 devices. This is probably a good choice if you're looking for speed.
https://sourceforge.net/projects/stm32flash/
This is open re-implementation of the ST-Link tools.
https://github.com/stlink-org/stlink st-flash
Java library allowing to flash STM32 microcontrollers over UART.
https://github.com/grevaillot/stm32flash-lib
GigaDevice offers the GD-Link Programmer to work with the GD-Link debug adapter, and GigaDevice MCU ISP Programmer.